На пути изучения языка C# мне встретилась тема "перегрузка операторов".
Вопрос такой : зачем вообще нужна эта перегрузка? Не усложняет ли эта примочка чтения кода?
public class coords
{
public int X{ get; set;}
static public int operator +(coords coord1,coords coords2)
{
return coord1.X+coord2.X;
}
}
static void main()
{
coords coord = new coords(){X = 20};
coords coord1 = new coords(X = 40);
Console.WriteLine(coord+coord1); //60
}
Лично мне бы читать такой код было затруднительно, вить более проще понять когда так:
Console.WriteLine(coord.X+coord1.X);//60
Просил бы привести пример, когда перегрузка операторов действительно полезна и нужна.
Перегрузка позволяет Вам работать с классами более привычными методами:
например, пишите вы класс для комплексных чисел
у этих чисел также есть сложение, вычитание, умножение и деление, однако они (особенно умножение и деление) выглядят иначе, чем для обычных чисел:
сложение
public static Complex operator +(Complex z1, Complex z2)
{
return new Complex(z1.re + z2.re, z1.im + z2.im);
}
в основном коде достаточно написать
z = z1 + z2;
И если Вы будете писать в основном коде умножение, как Вы предложили с координатами, то получите более сложный код - и как следствие - ошибки. Перегрузив же умножение получаем на выходе простейшие действия в основном коде
z1*z2
где ошибиться гораздо сложение, да и читабельнее.
Одной из перегрузок является перегрузка операторов Equals, == и !=, позволяющая Вам заранее определить методику сравнения на равенство двух объектов. По умолчанию C# сравнивает на равенство с помощью функции Equals определенной в классе Object,, а это значит, что два одинаковых объекта будут не равны между собой.
И это только самое простое, что мне сходу пришло в голову.
Однако, как указал tym32167 в комментариях, если у Вас свой тип с не столь очевидным сложением - накладная с товаром, документы (с полями хранящими создателя, согласующих и прочее) или что-то еще, то лучше создать отдельные методы, более очевидные при применении и прочтении.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости