У меня есть такой код:
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, причём, я буду ожидать, что эти условия эквивалентны. Не знаю, почему они не стали генерировать второй оператор сами, но причины его необходимости кажутся достаточно понятными - программист будет интуитивно ожидать, что второй ему тоже доступен.
Комментариев нет:
Отправить комментарий