2011-08-16 12 views
6

Duplicar posibles:
Why must we define both == and != in C#?+ =, +, == y = operadores

¿Por qué es la sobrecarga de + = posible sólo por la sobrecarga de +, pero == y! = están sobrecargados por separado?
Parece que debe invertirse.
+ = sobrecarga es casi siempre posible escribir más eficaz porque no es necesario asignar memoria para un objeto nuevo. Pero no puedo inventar un ejemplo en el que los operadores == y! = Sean diferentes en algo, excepto que inviertan el resultado Igual().

Respuesta

7

Una pregunta similar ha sido asked before.

La razón principal es que cuando sobrecarga los operadores == y !=, no tiene que devolver un valor booleano. Si no devuelve un booleano, no puede simplemente invertir el operador complementario. Hay otras razones posibles por las que están sobrecargadas por separado, puede ver las respuestas a esa pregunta por esos otros motivos.

hay una razón válida no se puede sobrecargar += y por lo tanto se hace de forma implícita a través del operador +. Tengo que ver con el hecho de que no puede anular el operador de asignación en C#, es parte del estándar de idioma. El += se incrementa y asigna, el último de los cuales no se puede sobrecargar en C#.

+4

+1 Imagínese la locura si pudiera sobrecargar '+' y '+ =' por separado ... –

+0

Si C# y .net no hicieron cosas malvadas con estructuras mutables (las estructuras mutables no son malas, algunas las cosas que .net hace con ellos son), o si permitieron que las clases restrinjan el reparto promiscuo maligno de referencias a sus objetos, sería útil tener operadores + = y + separados, ya que usar el operador "+" implicaría hacer una copie y deje intacto el original, mientras que "+ =" implica que el original se puede modificar. Tenga en cuenta, por cierto, que los eventos son compatibles con "+ =" y "- =", pero no son compatibles con "+" y "-". – supercat