Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Оператор присваивания
Оператор присваивания нужно явно переопределять, если разрабатываемый класс имеет хотя бы один динамический член данных. Если в этом случае оператор присваивания не переопределен, то будет происходить побитовое копирование. Понятие перегрузки операций в С# В C# так же имеется возможность перегружать операции. И есть дополнительные ограничения 1. + -! ~ ++ -- true false 2. + - * / % & | ^ < < > > - бинарные операции и они могут быть перегружены 3. ==! = < > = > < = - операции сравнения и должны перегружаться парами 4. [] не перегружаются(это обходится с помощью индексаторов) 5. () не перегружаются (это можно обойти с помощью специальных методов преобразования ) 6. += -= *= /= %= & =! = -- реализуются исходя из пункта 2 … 1) Объявление 2 объектов класса Point 2) Вывод на экран значений каждого объекта 3) Попытка сложить и вычесть две точки и вывести результат на экран, но блок 3 работать не будет, так как компилятор не может выполнить «+ и -», для нестандартных типов. Выход из этой ситуации --- оснастить тип Point специальными операциями.
Если в данном примере, необходимо прибавить к точке целое число, то указанная операция сложения не подходит и необходимо явно создавать оператор + с параметром point и int. Тоже самое для -, если параметр отличается от point Операции += и -= В отличии от языка С++, в языке С# эмулируются при появлении операции +- Point ptThree = new Point(90, 5); ptThree+=ptOne; Перегрузка операций ++ -- Для того, что бы использовать операцию ++ Public static Point operator ++(point p1{ Return new point(p1.x+1, p1.y+1); } Public static Point operator --(point p1){ Return new point(p1.x-1, p1.y-1); } } В отличии от языка С++, в языке С# автоматически создаются две версии инкремента/декремента(постфиксные, префиксные)
Перегрузка операции == //операция эквивалентности C.lass Point{ . . Public override bool equals(object 0){ Return 0.toString()==this.toString(); } Public static bool operator == (point p1, point p2){ Return p1.equals(p2); } Public static bool operator! =(point p1, point p2){ Return! p1.equals(p2); } } В данной реализации проверка на равенство делается с помощью перекрытия метода equals, который перешл от system.object.equals. С# требует в обязательном порядке реализации пары(! =/==), в отличии от С++, где можно реализовать в любом сочетании Перегрузка операции сравнения >, <, > =, < = Class Point: IComparable{ . . Public int compareto (object obj){ If (obj is point){ Point p = (point)obj; If(this.x> p.x & & this.y> p.y) return 1; If(this.x< p.x & & this.y< p.y) return -1; Else return 0; } Else throw new argument exception(); } Public static bool operator < (point p1, point p2){ Return (p1.compareto(p2))< 0; } Public static bool operator > (point p1, point p2){ Return (p1.compareto(p2))> 0; } Public static bool operator > =(point p1, point p2){ Return (p1.compareto(p2))> =0; } Public static bool operator < =(point p1, point p2){ Return (p1.compareto(p2))< =0; } Классы
|