Страницы

Поиск по вопросам

среда, 9 января 2019 г.

Перегрузка оператора < в c#

У меня есть такой код:
public class Foo { public static bool operator<(Foo l, Foo f) { Console.WriteLine("Foo!"); return false; } //public static bool operator>(Foo l, Foo f) //{ // return f < l; //} }
Я удивился, что в c# он не компилируется (сам пришел в с# после изучения с++). Соответсвенно возник вопрос, почему компилятор требует "парную" реализацию операторов <, >. Например в с++ такой код будет работать. Не могу понять причины такого дизайна в с#.


Ответ

Потому что C#, в отличие от плюсов, заточен не на максимальную эффективность, а на максимальную предсказуемость.
Он сам реализует операторы комбинированного присваивания, гарантируя, что a+=b будет работать так же, как a=a+b
И он требует чтобы парные операторы были реализованы в паре. Если я могу написать aa, причём, я буду ожидать, что эти условия эквивалентны. Не знаю, почему они не стали генерировать второй оператор сами, но причины его необходимости кажутся достаточно понятными - программист будет интуитивно ожидать, что второй ему тоже доступен.

Комментариев нет:

Отправить комментарий