
- •1)Принципы ооп (инкапсуляция, наследование, полиморфизм)
- •Формы полиморфизма Edit
- •2)Структура программы на с#
- •3)Встроенные типы данных. Типы-значения и ссылочные типы, упаковка и распаковка
- •4)Переменные и их инициализация, область видимости и время жизни переменных Проект Variables
- •Синтаксис объявления
- •Время жизни и область видимости переменных
- •Глобальные переменные уровня модуля.
- •Константы
- •5)Арифметические операторы, логические операторы
- •6)Приоритет операций, преобразование типов в выражениях
- •7)Оператор присваивания
- •Составные операторы присваивания
- •8)Операторы условный и выбора
- •Оператор if
- •Оператор switch
- •9)Операторы цикла
- •Цикл for
- •Цикл while
- •Цикл do. . . While
- •Цикл foreach
- •10)Операторы перехода
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •11)Массивы, создание и инициализация массивов, ступенчатые массивы
- •Инициализация массива
- •Неявно типизированные массивы
- •Определение массива объектов
- •Свойство Length
- •Двумерные массивы
- •Массивы трех и более измерений
- •Инициализация многомерных массивов
- •Применение свойства Length при обращении со ступенчатыми массивами
- •12)Классы и объекты, элементы класса
- •Общая форма определения класса
- •Данные-члены
- •Функции-члены
- •Переменные ссылочного типа и присваивание
- •Инициализаторы объектов
- •Методы, статические методы, параметры методов
- •Объявление методов
- •Возврат из метода и возврат значения
- •Использование параметров
- •14)Перегрузка методов
- •15)Конструкторы
- •16)Сборка мусора и деструкторы
- •Деструкторы
- •17)Перегрузки операторов
- •Перегрузка бинарных операторов
- •Перегрузка унарных операторов
- •Выполнение операций со встроенными в с# типами данных
- •Перегрузка операторов отношения и операторов true - false
- •Перегрузка операторов отношения
- •Перегрузка операторов true и false
- •Перегрузка логических операторов
- •Перегрузка укороченных логических операторов
- •Свойства
- •Автоматически реализуемые свойства
- •19)Индексаторы
- •Одномерные индексаторы
- •Многомерные индексаторы
- •20)Основы наследования
- •21)Конструкторы и наследование
- •23)Виртуальные методы
Выполнение операций со встроенными в с# типами данных
Для любого заданного класса и оператора имеется также возможность перегрузить сам операторный метод. Это, в частности, требуется для того, чтобы разрешить операции с типом класса и другими типами данных, в том числе и встроенными. Давайте добавим следующую перегрузку в предыдущий пример:
public static string operator +(MyArr obj1, string s)
{
return s + " " + obj1.x + " " + obj1.y + " " + obj1.z;
}
...
string s = Point2 + "Координаты точки Point2:";
Console.WriteLine(s);
Как подтверждает приведенный выше результат, когда оператор + применяется к двум объектам класса MyArr, то складываются их координаты. А когда он применяется к объекту типа MyArr и строковому значению, то возвращается строка с текущими координатами объекта.
Перегрузка операторов отношения и операторов true - false
C# --- Руководство по C# --- Перегрузка операторов отношения и логических операторов
Перегрузка операторов отношения
Операторы отношения, например == и <, могут также перегружаться, причем очень просто. Как правило, перегруженный оператор отношения возвращает логическое значение true и false. Это вполне соответствует правилам обычного применения подобных операторов и дает возможность использовать их перегружаемые разновидности в условных выражениях. Если же возвращается результат другого типа, то тем самым сильно ограничивается применимость операторов отношения.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class MyArr
{
// Координаты точки в трехмерном пространстве
public int x, y, z;
public MyArr(int x = 0, int y = 0, int z = 0)
{
this.x = x;
this.y = y;
this.z = z;
}
// Перегружаем логический оператор ==
public static bool operator ==(MyArr obj1, MyArr obj2)
{
if ((obj1.x == obj2.x) && (obj1.y == obj2.y) && (obj1.z == obj2.z))
return true;
return false;
}
// Теперь обязательно нужно перегрузить логический оператор !=
public static bool operator !=(MyArr obj1, MyArr obj2)
{
if ((obj1.x != obj2.x) || (obj1.y != obj2.y) || (obj1.z != obj2.z))
return true;
return false;
}
}
class Program
{
static void Main(string[] args)
{
MyArr myObject1 = new MyArr(x: 4, z: 5, y: 12);
MyArr myObject2 = new MyArr(x: 4, z: 5, y: 12);
if (myObject1 == myObject2)
Console.WriteLine("Объекты равны");
Console.ReadLine();
}
}
}
Обратите внимание, что на перегрузку операторов отношения накладывается следующее важное ограничение: они должны перегружаться попарно. Так, если перегружается оператор <, то следует перегрузить и оператор >, и наоборот. Ниже приведены составленные в пары перегружаемые операторы отношения:
!= ==
< >
<= >=
И еще одно замечание: если перегружаются операторы == и !=, то для этого обычно требуется также переопределить методы Object.Equals() и Object.GetHashCode().