operadores ¿Por qué las sobrecargas del operador de C#deben ser estáticas?




operador+= (3)

Quizás es mejor pensar por qué los métodos no deberían ser estáticos. No hay necesidad de estado y por lo tanto esto.

¿Por qué C # requiere que las sobrecargas del operador sean métodos estáticos en lugar de funciones miembro (como C ++)? (Quizás más específicamente: ¿cuál fue la motivación de diseño para esta decisión?)


Echa un vistazo a este post .

Un par de razones, la principal parece ser la preservación de la simetría del operador (de modo que el lado izquierdo de una operación binaria no recibe un tratamiento especial, como responsable de enviar la operación).


Respondió con un detalle insoportable aquí:

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

También hay otro punto más sutil sobre los tipos de valor y los operadores de instancia. Los operadores estáticos hacen posible este tipo de código:

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;

Por lo tanto, puede invocar al operador, aunque la referencia sea nula. Este no sería el caso de los operadores de ejemplo.





language-design