Язык программирования C#9 и платформа .NET5. Страница 218
// Операция + со строками.string s1 = "Hello";string s2 = " world!";string s3 = s1 + s2; // s3 теперь имеет значение "Hello World!"Операция
++Язык C# дает возможность строить специальные классы и структуры, которые также уникально реагируют на один и тот же набор базовых лексем (вроде операции
+
Перегрузка бинарных операций
Чтобы проиллюстрировать процесс перегрузки бинарных операций, рассмотрим приведенный ниже простой класс
PointOverloadedOpsusing System;namespace OverloadedOps{ // Простой будничный класс С#. public class Point { public int X {get; set;} public int Y {get; set;} public Point(int xPos, int yPos) { X = xPos; Y = yPos; } public override string ToString() => $"[{this.X}, {this.Y}]"; }}Рассуждая логически, суммирование объектов
PointPointPointXYPointusing System;using OverloadedOps;// Сложение и вычитание двух точек?Console.WriteLine("***** Fun with Overloaded Operators *****\n");// Создать две точки.Point ptOne = new Point(100, 100);Point ptTwo = new Point(40, 40);Console.WriteLine("ptOne = {0}", ptOne);Console.WriteLine("ptTwo = {0}", ptTwo);// Сложить две точки, чтобы получить большую точку?Console.WriteLine("ptOne + ptTwo: {0} ", ptOne + ptTwo);// Вычесть одну точку из другой, чтобы получить меньшую? Console.WriteLine("ptOne - ptTwo: {0} ", ptOne - ptTwo); Console.ReadLine();Тем не менее, с существующим видом класса
PointPoint+-static+-Point// Более интеллектуальный тип Point.public class Point{ ... // Перегруженная операция +. public static Point operator + (Point p1, Point p2) => new Point(p1.X + p2.X, p1.Y + p2.Y); // Перегруженная операция -. public static Point operator - (Point p1, Point p2) => new Point(p1.X - p2.X, p1.Y - p2.Y);}Логика, положенная в основу операции
+PointPointp1 + р2operator +// Псевдокод: Point рЗ = Point.operator+ (pi, р2)Point p3 = p1 + p2;Аналогично выражение
pi - р2// Псевдокод: Point р4 = Point.operator- (pi, р2)Point p4 = p1 - p2;После произведенной модификации типа
PointPoint
Перейти на страницу:
Изменить размер шрифта: