Подтвердить что ты не робот

Почему перегрузка операторов С# статична?

Почему С# требует перегрузки операторов как статические методы, а не функции-члены (например, С++)? (Возможно, более конкретно: какова была мотивация дизайна для этого решения?)

4b9b3361

Ответ 1

Взгляните на этот пост.

Несколько причин, по-видимому, основной задачей является сохранение симметрии оператора (так что левая сторона двоичной операции не получает специального лечения, поскольку отвечает за диспетчеризацию операции).

Ответ 2

Ответы на мучительную деталь здесь:

http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

Существует еще одна более тонкая точка в отношении типов значений и операторов экземпляра. Статические операторы делают такой код возможным:

class Blah {

    int m_iVal;

    public static Blah operator+ (Blah l, int intVal)
    {
        if(l == null)
            l = new Blah();
        l.m_iVal += intVal;
        return l;
    }
}

//main
Blah b = null;
b = b + 5;

Таким образом, вы можете вызвать оператор, хотя ссылка имеет значение null. Это не так, например, для операторов.

Ответ 3

Возможно, лучше всего подумать, почему методы должны быть не статичными. Нет необходимости в состоянии и, следовательно, в этом.