net framework і c# module 7_old
TRANSCRIPT
![Page 1: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/1.jpg)
.NET Framework і C#Модуль 7. Перевантаження
операторів
![Page 2: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/2.jpg)
В цьому модулі: Введення в перевантаження операторів;
Перевантаження унарних операторів;
Перевантаження бінарних операторів;
Перевантаження операторів відношення;
Перевантаження логічних операторів;
Перевантаження операторів true і false;
Перевантаження операторів перетворення;
2Andrey Gladky [email protected]
![Page 3: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/3.jpg)
Введення в перевантаження операторів Перевантаження операторів дозволяє вказати як, стандартні
оператори будуть використовуватись з об’єктами класу.
Перевантаження операторів використовується для покращення
читання програм.
Вимоги до перевантаження операторів:
• перевантаження операторів повинно виконуватись відкритими
статичними методами класу.
• у метода - оператора тип повертаючого значення або одного із
параметрів повинен співпадати з типом, в якому виконується
перевантаження операторів.
• параметри метода - оператора не повинні містити модифікатор out і
ref.
Andrey Gladky [email protected] 3
![Page 4: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/4.jpg)
Andrey Gladky [email protected] 4
Також як і з C++ в C# перевантаження операторів має деякі
обмеження:
• перевантаження не може змінити приорітет операторів
• при перевантажені не можна змінити число операндів, з
якими працює оператор
• не всі оператори можуть перевантажуватись
![Page 5: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/5.jpg)
Оператори що допускають перевантаження
Andrey Gladky [email protected] 5
Оператор Опис
- Зміна знака змінної
! Операція логічного заперечення
~ Операція побітового доповнення, яка призводить до
інверсії кожного біта
++, -- Інкримент і декримент
true, false Критерій істинності об’єкта, визначається
розробником класу
+, -, *, /, % Арифметичні оператори
&, |, ^, <<, >> Бітові операції
==, !=, <, >, <=, >= Оператори порівняння
&&, || Логічні оператори
[] Операції доступу до елементів масиву,
моделюються за рахунок індексаторів
() Операції перетворення
![Page 6: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/6.jpg)
Оператори що не допускають перевантаження
Andrey Gladky [email protected] 6
Оператор Опис
+=, -=, *=, /=,%=, &=,
|=, ^=, <<=, >>=
Перевантажуються автоматично при
перевантаженні відповідних бінарних операторів
= Присвоєння
. Доступ до члену типу
?: Оператора умови
new Створення об’єкта
as, is,typeof Використовується для отримання інформації про
тип
->, sizeof, *, & Доступні лише в небезпечному коді
Синтаксис перевантаження:
public static <тип результату> operator <символ операції>
(параметри)
![Page 7: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/7.jpg)
Перевантаження унарних операторів
Унарні оператори отримують лише один операнд
Повинен мати тип класу, в якому виконується перевантаження
Andrey Gladky [email protected] 7
public static class_name operator ++ (class_name cn)
{
//...
}
![Page 9: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/9.jpg)
Перевантаження бінарних операторів
Andrey Gladky [email protected] 9
public static class_name operator + (class_name cn, args)
{
//...
}
![Page 11: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/11.jpg)
Перевантаження операторів відношення Операції порівняння перевантажуються парами
== і !=
< i >
<= i >=
При перевантаженні операторів відношення потрібно враховувати, що
є два способи перевірки на рівність
Рівність посилань
Рівність значень
В класі object визначені наступні методи порівняння об’єктів
Andrey Gladky [email protected] 11
public static bool ReferenceEquals(Object obj1, Object obj2)
Public bool virtual Equals(Object obj)
![Page 13: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/13.jpg)
Перевантаження операторів true,
false
Andrey Gladky [email protected] 13
Під час перевантаження операторів true і false розробник задає
критерій істинності для свого типу даних.
Перевантаження виконується за наступними правилами:
◦ Оператор true повинен повертати true, якщо стан об’єкта істинний і false якщо інакше
◦ Оператор false повинен повертати true, якщо стан об’єкта хибний і false якщо інакше
◦ Оператори true і false потрібно перевантажувати в парі
При цьому можлива ситуація, коли стан не являється ні істинним ні
хибним – обидва оператори можуть повернути false.
Таблиця істинності
Значення Оператор True Оператор False
1 true false
-1 false true
0 false false
![Page 15: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/15.jpg)
Перевантаження логічних операторів Умовні логічні оператори && і || не можна перевантажити, але вони
обчислюються за допомогою & і |, що допускають перевантаження.
Таблиця істинності
Andrey Gladky [email protected] 15
Операнд1 Операнд2 & |
True True True True
False True False True
Null True Null True
True False False True
False False False False
Null False False Null
True Null Null True
False Null False Null
Null Null Null Null
![Page 17: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/17.jpg)
Перевантаження операторів перетворення Приведення може бути двох типів
◦ Із довільного типу в власний тип
◦ Із власного типу в довільний
Приведення типів може виконуватись явним і не явним способом:
◦ implicit – задає не явне перетворення, можна використовувати, якщо перетворення
завжди безпечне
◦ explicit – задає явне перетворення, варто використовувати, якщо можлива втрата даних
Andrey Gladky [email protected] 17
public static {implicit / explicit} operator цільовий тип (вихідний тип)
{
//….
}
![Page 19: Net framework і c# module 7_old](https://reader035.vdocuments.site/reader035/viewer/2022062317/58f0ecc41a28ab723d8b462b/html5/thumbnails/19.jpg)
Створити клас який буде містити два масиви
(множини). Перевантажити оператори +, *, -,
таким чином щоб можна було б виконати
наступні операції над множинами:
• перетин множин – тобто повернути множину С усіх
елементів, що належать як множині А, так і множині
B (*)
• об’єднання множин – тобто повернути множину С,
що складається з усіх елементів, які належать хоча б
одній із цих множин (+)
• різниці множин – тобто повернути множина С, яка
складається з усіх елементів, які належать множні А
і не належать множині В.(-)
Andrey Gladky [email protected] 19