- Главная
- Информатика
- Платформа Microsoft и С# (шарп) язык программирования
Содержание
- 2. Референсы! Книги! Платформа Microsoft и С# (шарп) язык программирования. https://drive.google.com/drive/folders/1YO2Bq5xYDYo5VPyYTPTq0gyG4RyTH5oh?usp=sharing
- 3. Референсы! Видео! ИНТЕРЕСНО!!! C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ https://youtu.be/KyFWqbRfWIA 3 Уроки C# (C sharp) | #1
- 4. https://vscode.ru/category/articles Референсы! Статьи! 4 https://tproger.ru/tag/c-sharp/ Полезные материалы по языку от Microsoft и уроки для начинающих C#-программистов.
- 5. Экзамен! Платформа Microsoft и С# (шарп) язык программирования.
- 6. Экзамен! Платформа Microsoft и С# (шарп) язык программирования.
- 7. Референсы! Перегрузка операторов Платформа Microsoft и С# (шарп) язык программирования.
- 8. Введение в перегрузку операторов! Платформа Microsoft и С# (шарп) язык программирования. Перегрузка операторов представляет собой механизм
- 9. Введение в перегрузку операторов! Платформа Microsoft и С# (шарп) язык программирования. Перегрузка операторов используется для улучшения
- 10. Перегрузка унарных операторов Платформа Microsoft и С# (шарп) язык программирования. Синтаксис перегрузки выглядит следующим образом. Поскольку
- 11. Перегрузка унарных операторов Платформа Microsoft и С# (шарп) язык программирования. В данном примере Point является ссылочным
- 12. Перегрузка унарных операторов Платформа Microsoft и С# (шарп) язык программирования. Интересно отметить, что с C# нет
- 13. Перегрузка бинарных операторов Платформа Microsoft и С# (шарп) язык программирования. Как отмечалось ранее, перегруженные операторы являются
- 14. Перегрузка бинарных операторов Платформа Microsoft и С# (шарп) язык программирования. Перегрузка операторов +=, *=, -= выполняется
- 15. Перегрузка операторов отношений Платформа Microsoft и С# (шарп) язык программирования. Операции сравнения перегружаются парами: если перегружается
- 16. Перегрузка операторов отношений Платформа Microsoft и С# (шарп) язык программирования. Метод ReferenceEquals() проверяет, указывают ли две
- 17. Перегрузка операторов отношений Платформа Microsoft и С# (шарп) язык программирования. Перегрузка оператора == обычно выполняется путем
- 18. Перегрузка операторов отношений Платформа Microsoft и С# (шарп) язык программирования. При переопределении метода Equals() следует также
- 19. Перегрузка операторов отношений Платформа Microsoft и С# (шарп) язык программирования. . public override string ToString() {
- 20. Перегрузка операторов true и false Платформа Microsoft и С# (шарп) язык программирования. При перегрузке операторов true
- 21. Перегрузка логических операторов Платформа Microsoft и С# (шарп) язык программирования. Логические операторы && и || перегрузить
- 22. Перегрузка логических операторов Платформа Microsoft и С# (шарп) язык программирования. Выполнение операторов && и || происходит
- 23. Перегрузка операторов преобразования Платформа Microsoft и С# (шарп) язык программирования. В собственных типах можно определить операторы,
- 24. Перегрузка операторов преобразования Платформа Microsoft и С# (шарп) язык программирования. Если потери данных в результате приведения
- 25. Перегрузка операторов преобразования Платформа Microsoft и С# (шарп) язык программирования. Например, имеется следующая иерархия классов. Единственное
- 26. Перегрузка операторов преобразования Платформа Microsoft и С# (шарп) язык программирования. using static System.Console; namespace SimpleProject {
- 27. Перегрузка операторов преобразования Платформа Microsoft и С# (шарп) язык программирования. Результат выполнения программы!
- 28. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. А теперь ещё одно любопытное средство языка C#,представляющее
- 29. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. Рассмотрим пример создания и применения индексатора. Предположим, есть
- 30. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. Здесь в аксессоре get осуществляется проверка нахождения индекса
- 31. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. . Создание одномерных индексаторов using System; using static
- 32. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. В C# есть возможность создавать не только одномерные,
- 33. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. Как было отмечено ранее, тип может поддерживать различные
- 34. Индексаторы Платформа Microsoft и С# (шарп) язык программирования. Перегрузка индексаторов using System; using static System.Console; namespace
- 35. Домашняя работа Платформа Microsoft и С# (шарп) язык программирования.
- 36. Лабораторная работа Платформа Microsoft и С# (шарп) язык программирования.
- 37. Платформа Microsoft и С# (шарп) язык программирования. Повторение предыдущих тем!
- 38. Платформа Microsoft и С# (шарп) язык программирования. Модификаторы доступа в C# В C# применяются следующие модификаторы
- 39. Платформа Microsoft и С# (шарп) язык программирования. Абстрактные классы и члены классов Кроме обычных свойств и
- 40. Платформа Microsoft и С# (шарп) язык программирования. Статические члены и модификатор static Кроме обычных полей, методов,
- 42. Скачать презентацию
Слайд 2Референсы!
Книги!
Платформа Microsoft и С# (шарп) язык программирования.
https://drive.google.com/drive/folders/1YO2Bq5xYDYo5VPyYTPTq0gyG4RyTH5oh?usp=sharing
Референсы!
Книги!
Платформа Microsoft и С# (шарп) язык программирования.
https://drive.google.com/drive/folders/1YO2Bq5xYDYo5VPyYTPTq0gyG4RyTH5oh?usp=sharing
Слайд 3Референсы!
Видео!
ИНТЕРЕСНО!!!
C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ
https://youtu.be/KyFWqbRfWIA
3
Уроки C# (C sharp) | #1 -
Референсы!
Видео!
ИНТЕРЕСНО!!!
C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ
https://youtu.be/KyFWqbRfWIA
3
Уроки C# (C sharp) | #1 -
https://youtu.be/3FWqP80fNJM
Создание игры “Space Invaders” на C# с нуля
https://youtu.be/Zw8DVvmutGc
Как стать C# разработчиком в 2021 году.
.NET или .NET Core?
https://youtu.be/z8XrqlOcjD0
Платформа Microsoft и С# (шарп) язык программирования.
!
Слайд 4https://vscode.ru/category/articles
Референсы!
Статьи!
4
https://tproger.ru/tag/c-sharp/
Полезные материалы по языку от Microsoft и уроки для начинающих C#-программистов.
https://habr.com/ru/company/microsoft/blog/573426/
Поддержка нескольких
https://vscode.ru/category/articles
Референсы!
Статьи!
4
https://tproger.ru/tag/c-sharp/
Полезные материалы по языку от Microsoft и уроки для начинающих C#-программистов.
https://habr.com/ru/company/microsoft/blog/573426/
Поддержка нескольких
Документация по C#
https://docs.microsoft.com/ru-ru/dotnet/csharp/
Статьи по C# и .NET
https://metanit.com/sharp/articles/
Программирование на C, C# и Java
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 5Экзамен!
Платформа Microsoft и С# (шарп) язык программирования.
Экзамен!
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 6Экзамен!
Платформа Microsoft и С# (шарп) язык программирования.
Экзамен!
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 7Референсы!
Перегрузка
операторов
Платформа Microsoft и С# (шарп) язык программирования.
Референсы!
Перегрузка
операторов
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 8Введение
в перегрузку операторов!
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов представляет собой
Введение
в перегрузку операторов!
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов представляет собой
Слайд 9Введение
в перегрузку операторов!
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов используется для
Введение
в перегрузку операторов!
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов используется для
■ перегрузка операторов должна выполняться открытыми статическими методами класса;
■ у метода-оператора тип возвращаемого значения или одного из параметров должен совпадать с типом, в котором выполняется перегрузка оператора;
■ параметры метода-оператора не должны включать модификатор out и ref.
Слайд 10Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Синтаксис перегрузки выглядит следующим образом.
Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Синтаксис перегрузки выглядит следующим образом.
Слайд 11Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
В данном примере Point является
Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
В данном примере Point является
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
//перегрузка инкремента
public static Point operator ++(Point s)
{
s.X++;
s.Y++;
return s;
}
//перегрузка декремента
public static Point operator --(Point s)
{
s.X--;
s.Y--;
return s;
}
//перегрузка оператора -
public static Point operator -(Point s)
{
return new Point { X = -s.X, Y = -s.Y };
}
public override string ToString()
{
return $"Point: X = {X}, Y = {Y}";
}
}
class Program
{
static void Main()
{
Point point = new Point { X = 10, Y = 10 };
WriteLine($"Исходная точка\n{point}");
WriteLine("Префиксная и постфиксная формы инкремента выполняются одинаково");
WriteLine(++point); // x=11, y=11
WriteLine(point++); // x=12, y=12
WriteLine($"Префиксная форма декремента\n { --point} ");
WriteLine($"Выполнение оператора –\n { -point}");
WriteLine($"не изменило исходную точку\n { point}");
}
}
}
Слайд 12Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Интересно отметить, что с C#
Перегрузка
унарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Интересно отметить, что с C#
при вызове постфиксная и префиксная форма работают одинаково, как префиксная форма.
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
//перегрузка инкремента
public static Point operator ++(Point s)
{
s.X++;
s.Y++;
return s;
}
//перегрузка декремента
public static Point operator --(Point s)
{
s.X--;
s.Y--;
return s;
}
//перегрузка оператора -
public static Point operator -(Point s)
{
return new Point { X = -s.X, Y = -s.Y };
}
public override string ToString()
{
return $"Point: X = {X}, Y = {Y}";
}
}
class Program
{
static void Main()
{
Point point = new Point { X = 10, Y = 10 };
WriteLine($"Исходная точка\n{point}");
WriteLine("Префиксная и постфиксная формы инкремента выполняются одинаково");
WriteLine(++point); // x=11, y=11
WriteLine(point++); // x=12, y=12
WriteLine($"Префиксная форма декремента\n { --point} ");
WriteLine($"Выполнение оператора –\n { -point}");
WriteLine($"не изменило исходную точку\n { point}");
}
}
}
Слайд 13Перегрузка бинарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Как отмечалось ранее, перегруженные
Перегрузка бинарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Как отмечалось ранее, перегруженные
Итак, вектор — направленный отрезок, имеющий начало и конец, то есть две точки. Для того чтобы получить координаты вектора необходимо из координат конечной точки вычесть соответствующие координаты начальной точки. Для того чтобы сложить два вектора нужно сложить их соответствующие координаты, разность — аналогично. Для того чтобы умножить вектор на число, необходимо каждую координату вектора умножить на это число. Создадим класс Vector, используя разработанный ранее класс Point.
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
}
class Vector
{
public int X { get; set; }
public int Y { get; set; }
public Vector() { }
public Vector(Point begin, Point end)
{
X = end.X - begin.X;
Y = end.Y - begin.Y;
}
public static Vector operator +(Vector v1,
Vector v2)
{
return new Vector
{
X = v1.X + v2.X,
Y = v1.Y + v2.Y
};
}
public static Vector operator -(Vector v1,
Vector v2)
{
return new Vector
{
X = v1.X - v2.X,
Y = v1.Y - v2.Y
};
}
public static Vector operator *(Vector v, int n)
{
v.X *= n;
v.Y *= n;
return v;
}
Слайд 14Перегрузка бинарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов +=, *=,
Перегрузка бинарных операторов
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка операторов +=, *=,
Однако, перегруженные в примере, операторы будут использоваться компилятором, только если переменная типа Vector находится слева от знака операнда. То есть выражение v1*10 откомпилируется нормально, а при перестановке сомножителей — в выражении 10*v1 произойдет ошибка на этапе компиляции. Для исправления этой ошибки следует перегрузить оператор * с другим порядком операндов:
public override string ToString()
{
return $"Vector: X = {X}, Y = {Y}";
}
}
class Program
{
static void Main()
{
Point p1 = new Point { X = 2, Y = 3 };
Point p2 = new Point { X = 3, Y = 1 };
Vector v1 = new Vector(p1, p2);
Vector v2 = new Vector { X = 2, Y = 3 };
WriteLine($"\tВектора\n{v1}\n{v2}");
WriteLine($"\n\tСложение векторов\n{v1 + v2}\n"); // x=3, y=1
WriteLine($"\tРазность векторов\n{v1 - v2}\n"); // x=-1, y=-5
WriteLine("Введите целое число");
int n = int.Parse(ReadLine());
v1 *= n;
WriteLine($"\n\tУмножение вектора на число { n}\n{v1}\n ");
}
}
}
public static Vector operator *(Vector v, int n)
{
return v * n;
}
Слайд 15Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Операции сравнения перегружаются парами:
Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Операции сравнения перегружаются парами:
■ == и !=
■ < и >
■ <= и >=.
При перегрузке операторов отношения надо учитывать, что есть два способа проверки равенства:
■ равенство ссылок (тождество);
■ равенство значений.
В классе Object определены следующие методы сравнения объектов:
■ public static bool ReferenceEquals(Object obj1, Object obj2)
■ public bool virtual Equals(Object obj)
Есть отличия в работе этих методов со значимыми и ссылочными типами.
Слайд 16Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Метод ReferenceEquals() проверяет, указывают
Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Метод ReferenceEquals() проверяет, указывают
using static System.Console;
namespace SimpleProject
{
class CPoint
{
public int X { get; set; }
public int Y { get; set; }
}
struct SPoint
{
public int X { get; set; }
public int Y { get; set; }
}
class Program
{
static void Main()
{
// работа метода ReferenceEquals со
// ссылочными и значимыми типами
//ссылочный тип
CPoint cp = new CPoint { X = 10, Y = 10 };
CPoint cp1 = new CPoint { X = 10, Y = 10 };
CPoint cp2 = cp1;
// хотя p и p1 содержат одинаковые
// значения, они указывают на разные
// адреса памяти
WriteLine($"ReferenceEquals(cp, cp1) = { ReferenceEquals(cp, cp1)} "); // false
Слайд 17Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка оператора == обычно
Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка оператора == обычно
// p1 и p2 указывают на один и тот же
// адрес памяти
WriteLine($"ReferenceEquals(cp1, cp2) = { ReferenceEquals(cp1, cp2)} "); // true
// значимый тип
SPoint sp = new SPoint { X = 10, Y = 10 };
// при передаче в метод ReferenceEquals
// выполняется упаковка, упакованные
// объекты располагаются
// по разным адресам
WriteLine($"ReferenceEquals(sp, sp) = { ReferenceEquals(sp, sp)} "); // false
// работа метода Equals со ссылочными
// и значимыми типами
// выполняется сравнение адресов
// ссылочных типов
WriteLine($"Equals(cp, cp1) = { Equals(cp, cp1)} "); // false
// значимый тип
SPoint sp1 = new SPoint { X = 10, Y = 10 };
// выполняется сравнение значений полей
WriteLine($"Equals(sp, sp1) = { Equals(sp, sp1)} "); // true
}
}
}
Слайд 18Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
При переопределении метода Equals()
Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
При переопределении метода Equals()
using System;
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
// переопределение метода Equals
public override bool Equals(object obj)
{
return this.ToString() == obj.ToString();
}
// необходимо также переопределить метод
// GetHashCode
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
public static bool operator ==(Point p1, Point p2)
{
return p1.Equals(p2);
}
public static bool operator !=(Point p1, Point p2)
{
return !(p1 == p2);
}
public static bool operator >(Point p1, Point p2)
{
return Math.Sqrt(p1.X * p1.X + p1.Y * p1.Y) >
Math.Sqrt(p2.X * p2.X + p2.Y * p2.Y);
}
public static bool operator <(Point p1, Point p2)
{
return Math.Sqrt(p1.X * p1.X + p1.Y * p1.Y) <
Math.Sqrt(p2.X * p2.X + p2.Y * p2.Y);
}
Слайд 19Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
.
public override string ToString()
Перегрузка операторов отношений
Платформа Microsoft и С# (шарп) язык программирования.
.
public override string ToString()
return $"Point: X = {X}, Y = {Y}.";
}
}
class Program
{
static void Main(string[] args)
{
Point point1 = new Point { X = 10, Y = 10 };
Point point2 = new Point { X = 20, Y = 20 };
WriteLine($"point1: {point1}");
WriteLine($"point2: {point2}\n");
WriteLine($"point1 == point2: { point1 == point2} "); // false
WriteLine($"point1 != point2: {point1 != point2}\n"); // true
WriteLine($"point1 > point2: {point1 > point2}"); // false
WriteLine($"point1 < point2: {point1 < point2}"); // true
}
}
}
Слайд 20Перегрузка операторов true и false
Платформа Microsoft и С# (шарп) язык программирования.
При перегрузке
Перегрузка операторов true и false
Платформа Microsoft и С# (шарп) язык программирования.
При перегрузке
Перегрузка выполняется по следующим правилам:
■ оператор true должен возвращать значение true, если состояние объекта истинно и false в противном случае;
■ оператор false должен возвращать значение true, если состояние объекта ложно и false в противном случае;
■ операторы true и false надо перегружать в паре.
В качестве критерия истинности мы взяли равенство всех координат конкретной точки нулевому значению.
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
public static bool operator true(Point p)
{
return p.X != 0 || p.Y != 0 ? true : false;
}
public static bool operator false(Point p)
{
return p.X == 0 && p.Y == 0 ? true : false;
}
public override string ToString()
{
return $"Point: X = {X}, Y = {Y}.";
}
}
class Program
{
static void Main(string[] args)
{
WriteLine("Введите координаты точки на плоскости");
Point point = new Point
{
X = int.Parse(ReadLine()),
Y = int.Parse(ReadLine())
};
if (point)
{
WriteLine("Точка не в начале координат.");
}
else
{
WriteLine("Точка в начале координат.");
}
}
}
}
Слайд 21Перегрузка
логических операторов
Платформа Microsoft и С# (шарп) язык программирования.
Логические операторы && и ||
Перегрузка
логических операторов
Платформа Microsoft и С# (шарп) язык программирования.
Логические операторы && и ||
выполнить ряд требований:
■ в классе должна быть выполнена перегрузка операторов true и false;
■ в классе необходимо перегрузить логические операторы & и |;
■ методы перегрузки операторов & и | должны возвращать тип класса, в котором осуществляется перегрузка;
■ параметрами в методах перегрузки операторов & и | должны быть ссылки на класс, который содержит перегрузку.
using static System.Console;
namespace SimpleProject
{
class Point
{
public int X { get; set; }
public int Y { get; set; }
public static bool operator true(Point p)
{
return p.X != 0 || p.Y != 0 ? true : false;
}
public static bool operator false(Point p)
{
return p.X == 0 && p.Y == 0 ? true : false;
}
// перегружаем логический оператор |
public static Point operator |(Point p1,
Point p2)
{
if ((p1.X != 0 || p1.Y != 0) || (p2.X !=
0 || p2.Y != 0))
return p2;
return new Point();
}
// перегружаем логический оператор &
public static Point operator &(Point p1,
Point p2)
{
if ((p1.X != 0 && p1.Y != 0) && (p2.X !=
0 && p2.Y != 0))
return p2;
return new Point();
}
public override string ToString()
{
return $"Point: X = {X}, Y = {Y}.";
}
}
class Program
{
static void Main(string[] args)
{
Point point1 = new Point { X = 10, Y = 10 };
Point point2 = new Point { X = 0, Y = 0 };
WriteLine($"point1: {point1}");
WriteLine($"point2: {point2}\n");
Write("point1 && point2: ");
if (point1 && point2)
{
WriteLine("true");
}
else
{
WriteLine("false");
}
Write("point1 || point2: ");
if (point1 || point2)
{
WriteLine("true");
}
else
{
WriteLine("false");
}
}
}
}
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/boolean-logical-operators
Слайд 22Перегрузка
логических
операторов
Платформа Microsoft и С# (шарп) язык программирования.
Выполнение операторов && и ||
Перегрузка
логических
операторов
Платформа Microsoft и С# (шарп) язык программирования.
Выполнение операторов && и ||
Слайд 23Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
В собственных типах можно
Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
В собственных типах можно
■ из произвольного типа в собственный тип;
■ из собственного типа в произвольный тип.
Для ссылочных и значимых типов приведение выполняется одинаково.
Как Вам известно, приведение может выполняться явным и неявным образом. Явное приведение типов требуется, если возможна потеря данных в результате приведения. Например:
■ при преобразовании int в short, потому что размер short недостаточен для сохранения значения int;
■ при преобразовании типов данных со знаком в без знаковые может быть получен неверный результат, если переменная со знаком содержит отрицательное значение;
■ при конвертировании типов с плавающей точкой в целые, так как дробная часть теряется;
■ при конвертировании типа, допускающего null значения, в тип, не допускающий null, если исходная переменная содержит null, генерируется исключение.
Слайд 24Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Если потери данных в
Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Если потери данных в
■ implicit задает неявное преобразование, его можно использовать, если преобразование всегда безопасно независимо от значения переменной, которая преобразуется;
■ explicit задает явное преобразование, его следует использовать, если возможна потеря данных или возникновение исключения.
Объявление оператора преобразования в классе:
Имеется возможность выполнять приведение между экземплярами разных собственных структур или классов. Однако при этом существуют следующие ограничения:
■ нельзя определить приведение между классами, если один из них является наследником другого;
■ приведение может быть определено только в одном из типов: либо в исходном типе, либо в типе назначения.
Слайд 25Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Например, имеется следующая иерархия
Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Например, имеется следующая иерархия
основании стороны квадрата. Также перегрузим, оператор явного преобразования (explicit), из класса Rectangle в класс Square с потерей данных — сторона квадрата равна высоте прямоугольника, ширина не учитывается. Для класса Square определим явное и неявное преобразование к целому типу.
Слайд 26Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
using static System.Console;
namespace SimpleProject
{
Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
using static System.Console;
namespace SimpleProject
{
{
public abstract void Draw();
}
abstract class Quadrangle : Figure { }
class Rectangle : Quadrangle
{
public int Width { get; set; }
public int Height { get; set; }
public static implicit operator Rectangle(Square s)
{
return new Rectangle
{
Width = s.Length * 2,
Height = s.Length
};
}
public override void Draw()
{
for (int i = 0; i < Height; i++, WriteLine())
{
for (int j = 0; j < Width; j++)
{
Write("*");
}
}
WriteLine();
}
public override string ToString()
{
return $"Rectangle: Width = {Width}, Height = { Height}";
}
}
class Square : Quadrangle
{
public int Length { get; set; }
public static explicit operator
Square(Rectangle rect)
{
return new Square { Length = rect.Height };
}
public static explicit operator int(Square s)
{
return s.Length;
}
public static implicit operator Square(int number)
{
return new Square { Length = number };
}
public override void Draw()
{
for (int i = 0; i < Length; i++, WriteLine())
{
for (int j = 0; j < Length; j++)
{
Write("*");
}
}
WriteLine();
}
public override string ToString()
{
return $"Square: Length = {Length}";
}
}
class Program
{
static void Main(string[] args)
{
Rectangle rectangle = new Rectangle
{
Width = 5,
Height = 10
};
Square square = new Square { Length = 7 };
Rectangle rectSquare = square;
WriteLine($"Неявное преобразование квадрата({ square}) кпрямоугольнику.\n{ rectSquare}\n");
rectSquare.Draw();
Square squareRect = (Square)rectangle;
WriteLine($"Явное преобразование прямоугольника({ rectangle}) к квадрату.\n{ squareRect}\n");
squareRect.Draw();
WriteLine("Введите целое число.");
int number = int.Parse(ReadLine());
Square squareInt = number;
WriteLine($"Неявное преобразование целого ({ number}) к квадрату.\n{ squareInt}\n");
squareInt.Draw();
number = (int)square;
WriteLine($"Явное преобразование квадрата ({ square}) к целому.\n { number} ");
}
}
}
Слайд 27Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Результат выполнения программы!
Перегрузка операторов преобразования
Платформа Microsoft и С# (шарп) язык программирования.
Результат выполнения программы!
Слайд 28Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
А теперь ещё одно любопытное средство
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
А теперь ещё одно любопытное средство
Синтаксис объявления индексатора следующий:
Тип_данных — это тип объектов коллекции, this — это ссылка на объект, в котором определен индексатор. То, что для индексаторов используется синтаксис со ссылкой this, подчёркивает, что их можно использовать только на экземплярном уровне и никак иначе. Тип_аргумента представляет индекс объекта в коллекции, причём этот индекс необязательно целочисленный, он может быть любого типа. У каждого индексатора должен быть минимум один параметр, но их может быть и больше (многомерные индексаторы).
Слайд 29Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Рассмотрим пример создания и применения индексатора.
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Рассмотрим пример создания и применения индексатора.
Создание одномерных индексаторов
Слайд 30Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Здесь в аксессоре get осуществляется проверка
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Здесь в аксессоре get осуществляется проверка
Создание одномерных индексаторов
Слайд 31Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
.
Создание одномерных индексаторов
using System;
using static System.Console;
namespace
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
.
Создание одномерных индексаторов
using System;
using static System.Console;
namespace
{
public class Laptop
{
public string Vendor { get; set; }
public double Price { get; set; }
public override string ToString()
{
return $"{Vendor} {Price}";
}
}
public class Shop
{
Laptop[] laptopArr;
public Shop(int size)
{
laptopArr = new Laptop[size];
}
public int Length
{
get { return laptopArr.Length; }
}
public Laptop this[int index]
{
get
{
if (index >= 0 && index <
laptopArr.Length)
{
return laptopArr[index];
}
throw new IndexOutOfRangeException();
}
set
{
laptopArr[index] = value;
}
}
}
public class Program
{
public static void Main()
{
Shop laptops = new Shop(3);
laptops[0] = new Laptop
{
Vendor = "Samsung",
Price = 5200
};
laptops[1] = new Laptop
{
Vendor = "Asus",
Price = 4700
};
laptops[2] = new Laptop
{
Vendor = "LG",
Price = 4300
};
try
{
for (int i = 0; i < laptops.Length; i++)
{
WriteLine(laptops[i]);
}
}
catch (Exception ex)
{
WriteLine(ex.Message);
}
}
}
}
Теперь рассмотрим
код программы целиком.
Слайд 32Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
В C# есть возможность создавать не
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
В C# есть возможность создавать не
Создание многомерных индексаторов
using static System.Console;
namespace SimpleProject
{
public class MultArray
{
private int[,] array;
public int Rows { get; private set; }
public int Cols { get; private set; }
public MultArray(int rows, int cols)
{
Rows = rows;
Cols = cols;
array = new int[rows, cols];
}
public int this[int r, int c]
{
get { return array[r, c]; }
set { array[r, c] = value; }
}
}
public class Program
{
static void Main()
{
MultArray multArray = new MultArray(2, 3);
for (int i = 0; i < multArray.Rows; i++)
{
for (int j = 0; j < multArray.Cols; j++)
{
multArray[i, j] = i + j;
Write($"{multArray[i, j]} ");
}
WriteLine();
}
}
}
}
Слайд 33Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Как было отмечено ранее, тип может
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Как было отмечено ранее, тип может
Перегрузка индексаторов
Слайд 34Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка индексаторов
using System;
using static System.Console;
namespace SimpleProject
{
Индексаторы
Платформа Microsoft и С# (шарп) язык программирования.
Перегрузка индексаторов
using System;
using static System.Console;
namespace SimpleProject
{
{
public string Vendor { get; set; }
public double Price { get; set; }
public override string ToString()
{
return $"{Vendor} {Price}";
}
}
enum Vendors { Samsung, Asus, LG };
public class Shop
{
private Laptop[] laptopArr;
public Shop(int size)
{
laptopArr = new Laptop[size];
}
public int Length
{
get { return laptopArr.Length; }
}
public Laptop this[int index]
{
get
{
if (index >= 0 && index <
laptopArr.Length)
{
return laptopArr[index];
}
throw new IndexOutOfRangeException();
}
set
{
laptopArr[index] = value;
}
}
public class Program
{
public static void Main()
{
Shop laptops = new Shop(3);
laptops[0] = new Laptop
{
Vendor = "Samsung",
Price = 5200
};
laptops[1] = new Laptop
{
Vendor = "Asus",
Price = 4700
};
laptops[2] = new Laptop
{
Vendor = "LG",
Price = 4300
};
try
{
for (int i = 0; i < laptops.Length; i++)
{
WriteLine(laptops[i]);
}
WriteLine();
WriteLine($"Производитель Asus: { laptops["Asus"]}.");
WriteLine($"Производитель HP: { laptops["HP"]}.");
// игнорирование
laptops["HP"] = new Laptop();
WriteLine($"Стоимость 4300: { laptops[4300.0]}.");
// недопустимая стоимость
WriteLine($"Стоимость 10500: { laptops[10500.0]}.");
// игнорирование
laptops[10500.0] = new Laptop();
}
catch (Exception ex)
{
WriteLine(ex.Message);
}
}
}
}
public Laptop this[string name]
{
get
{
if (Enum.IsDefined(typeof(Vendors), name))
{
return laptopArr[(int)Enum.
Parse(typeof(Vendors), name)];
}
else
{
return new Laptop();
}
}
set
{
if (Enum.IsDefined(typeof(Vendors), name))
{
laptopArr[(int)Enum.
Parse(typeof(Vendors), name)] =
value;
}
}
}
public int FindByPrice(double price)
{
for (int i = 0; i < laptopArr.Length; i++)
{
if (laptopArr[i].Price == price)
{
return i;
}
}
return -1;
}
public Laptop this[double price]
{
get
{
if (FindByPrice(price) >= 0)
{
return this[FindByPrice(price)];
}
throw new Exception("Недопустимая стоимость.");
}
set
{
if (FindByPrice(price) >= 0)
{
this[FindByPrice(price)] = value;
}
}
}
}
Слайд 35Домашняя работа
Платформа Microsoft и С# (шарп) язык программирования.
Домашняя работа
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 36Лабораторная работа
Платформа Microsoft и С# (шарп) язык программирования.
Лабораторная работа
Платформа Microsoft и С# (шарп) язык программирования.
Слайд 37Платформа Microsoft и С# (шарп) язык программирования.
Повторение предыдущих тем!
Платформа Microsoft и С# (шарп) язык программирования.
Повторение предыдущих тем!
Слайд 38Платформа Microsoft и С# (шарп) язык программирования.
Модификаторы доступа в C#
В C# применяются
Платформа Microsoft и С# (шарп) язык программирования.
Модификаторы доступа в C#
В C# применяются
public: публичный, общедоступный класс или член класса. Такой член класса доступен из любого места в коде, а также из других программ и сборок.
private: закрытый класс или член класса. Представляет полную противоположность модификатору public. Такой закрытый класс или член класса доступен только из кода в том же классе или контексте.
protected: такой член класса доступен из любого места в текущем классе или в производных классах. При этом производные классы могут располагаться в других сборках.
internal: класс и члены класса с подобным модификатором доступны из любого места кода в той же сборке, однако он недоступен для других программ и сборок (как в случае с модификатором public).
protected internal: совмещает функционал двух модификаторов. Классы и члены класса с таким модификатором доступны из текущей сборки и из производных классов.
private protected: такой член класса доступен из любого места в текущем классе или в производных классах, которые определены в той же сборке.
Слайд 39Платформа Microsoft и С# (шарп) язык программирования.
Абстрактные классы и члены классов
Кроме обычных
Платформа Microsoft и С# (шарп) язык программирования.
Абстрактные классы и члены классов
Кроме обычных
Абстрактные члены классов не должны иметь модификатор private. При этом производный класс обязан переопределить и реализовать все абстрактные методы и свойства, которые имеются в базовом абстрактном классе. При переопределении в производном классе такой метод или свойство также объявляются с модификатором override (как и при обычном переопределении виртуальных методов и свойств). Также следует учесть, что если класс имеет хотя бы одиный абстрактный метод (или абстрактные свойство, индексатор, событие), то этот класс должен быть определен как абстрактный.
Слайд 40Платформа Microsoft и С# (шарп) язык программирования.
Статические члены и модификатор static
Кроме обычных
Платформа Microsoft и С# (шарп) язык программирования.
Статические члены и модификатор static
Кроме обычных
На уровне памяти для статических полей будет создаваться участок в памяти, который будет общим для всех объектов класса.