2010-01-07 21 views
19

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

+0

C++ permite que los operadores sean funciones libres (es decir, no miembros). Pero C# decidió poner una prohibición de los estalinianos a las funciones gratuitas, por lo que debe poner estática allí. –

Respuesta

26

Eche un vistazo a this post.

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

30

responden en absoluto detalle aquí:

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

También hay otro punto sutil sobre los tipos de valores y operadores de instancia. operadores estáticas hacen que este tipo de código posible:

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; 

Así puede invocar el operador, a pesar de que la referencia es nula. Este no sería el caso para los operadores de ejemplo.

+0

va a dar el cheque verde a @Sapph solo porque tienes waaaay más representante :) – dkackman

+0

jaja vi que el representante subía y bajaba por un segundo. Bien merecido, Sapph puso más esfuerzo en la respuesta. –

+3

+1 para obtener un excelente fragmento de código: D – Sapph

0

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.

+0

Puede que no exista un beneficio estatal, pero tener una sobrecarga de operador virtual sería genial. La cosa de estado no es la razón por la cual no está disponible en C#. –

Cuestiones relacionadas