Ссылка на оператор равенства в реализации оператора равенства

Используя Reflector или DotPeek, System.Linq.Data.Binary реализация перегрузки оператора равенства выглядит следующим образом:

[Serializable, DataContract]
public sealed class Binary : IEquatable<Binary>
{
...
    public static bool operator ==(Binary binary1, Binary binary2)
    {
        return ((binary1 == binary2) || (((binary1 == null) && (binary2 == null)) || (((binary1 != null) && (binary2 != null)) && binary1.EqualsTo(binary2))));
    }

Я должен упустить что-то очевидное, или есть механизм, о котором я не знаю (например, неявный вызов object == внутри тела?). Признаюсь, мне редко, если вообще когда-либо, нужно перегружать стандартные операторы.

Почему эта реализация не приводит к бесконечной рекурсии (которая, как показывает простой тест, не повторяется бесконечно)? Первое условное выражение - это binary1 == binary2 в рамках реализации перегрузки оператора, которая вызывалась бы, если бы вы использовали binary1 == binary2 вне реализации, и я бы подумал, что тоже внутри.

5
задан hatchet - Reinstate Monica 7 August 2011 в 18:06
поделиться