В спецификации нашли here, я нашел на странице 344 Котировка
Подпись бинарного оператора состоит из лексемы оператора (+, -, *, /,%, &, |, ^, < <, >>, ==,! =,>, <,> =, или < =) и типы двух формальных параметров.
Следует отметить, что «типы» являются плюрализованными. В C# я рассматриваю двоичные операторы как похожие на методы, которые принимают два параметра и возвращают значение данного типа. Тип возвращаемого значения должен определяться типами двух входных параметров.
UPDATE:
я решил добавить еще немного, так как я нахожу это интересным. В этом Eric Lippert Blog Post он говорит следующее.
[...] он является законным и удивительно общие для класса, чтобы реализовать ==
и Equals
непоследовательно.
Все его сообщение в основном состоит в том, как C# определяет множество способов сравнения двух объектов, и нигде в спецификации не определено, что все они должны вести себя последовательно. Среди прочего, это означает, что вы можете определить свои собственные классы A
и B
так, чтобы (a as A) == (b as B)
и (a as A) != (b as B)
оценили одно и то же.
Это просто добавляет немного больше ударов позади моего комментария ранее, что бинарные операторы действительно очень похожи на методы в этом отношении. Язык C# не дает для них определенного значения, хотя мы, как люди, находим это запутанным.
Можно определить пользовательские операторы сравнения, которые не используют одни и те же типы для обоих аргументов, поэтому я сомневаюсь, что существует явное ограничение. Все встроенные сравнения одного типа, и встроенные преобразования всегда доступны. –
Возможно, вы спрашиваете о поведении встроенных операторов равенства, которые имеют следующее ограничение: «Ошибка привязки-времени использовать предопределенные операторы равенства ссылочного типа для сравнения двух ссылок, которые, как известно, различаются во время привязки. Например, если типы привязки-операнды являются двумя типами классов A и B, и если ни A, ни B не являются производными от другого, тогда было бы невозможно, чтобы оба операнда ссылались на один и тот же объект. Таким образом, операция считается ошибкой времени привязки ». –