Dada estado de cuenta actual de Microsoft en operadores de igualdad y ==
!=
, la conclusión es: ==
debe ser sólo azúcar sintáctica para Object.Equals()
:
¿garantiza que Object.equals y los operadores de igualdad tienen exactamente el mismo semántica
de http://msdn.microsoft.com/en-us/library/vstudio/7h9bszxx(v=vs.110).aspx
Que son distintos, en lugar de solo azúcar, en retrospectiva, parece ser un error en su diseño.
Si quiere estar seguro de que está obteniendo IDENTIDAD comparación (al comparar referencias), entonces use ReferenceEquals
en su lugar.
Por desgracia, el manejo de ==
es tan inconsistente, que normalmente evitar que cuando se manipula de otra persona clases personalizadas, y sólo tiene que utilizar el menos legible Equals(a, b)
o ReferenceEquals(a, b)
, dependiendo de lo que significa que quiero.
En mi humilde opinión, sería mejor para las personas no implementar ==
y !=
en absoluto. Simplemente deje .Net predeterminado a Equals
y ! Equals
, e implemente Equals
según corresponda.
Si alguien tiene un razonamiento diferente, me gustaría escucharlo.
(Y sí, esto es realmente confuso, dado que Java existía primero, y usa ==
para significar ==
. Pero es demasiado tarde para modificar .Net para comportarse de esa manera. Y tenemos la declaración de Microsoft para ese efecto, en el enlace anterior).
Como alguien que entra en los genéricos las diferencias pueden ser enormes cuando las está llamando en cualquier tipo T a ciegas. –
"ciegamente" es una mala práctica para cualquier cosa. si conoce la respuesta a su pregunta, ¿por qué pregunta? – aku
Incluso si conociera una respuesta concreta (que no es así), ¿quizás por la misma razón por la que la gente hace preguntas y se responde a sí misma? Además, ¿cómo puedes hacer algo más por un tipo genérico T? Si comienzas a hacer cosas como if (typeof (T) == typeof (int)), ¿cuál es el punto? –