Pregunta

¿O es aconsejable hacer eso? ¿Por qué?

¿Fue útil?

Solución

Consulte las directrices para anular Equals () y operator == .

Cita:

  

Por defecto, el operador == prueba la igualdad de referencia al determinar si dos referencias indican el mismo objeto. Por lo tanto, los tipos de referencia no tienen que implementar el operador == para obtener esta funcionalidad. Cuando un tipo es inmutable, es decir, los datos contenidos en la instancia no se pueden cambiar, sobrecargar el operador == para comparar la igualdad de valores en lugar de la igualdad de referencia puede ser útil porque, como objetos inmutables, se pueden considerar iguales siempre ya que tienen el mismo valor No es una buena idea anular operator == en tipos no inmutables.

Básicamente:

Si quiere que == y! = se comporte como Equals (..) y ! Equals (..) necesita implementar los operadores. Por lo general, hace esto solo con tipos inmutables.

Otros consejos

Consulte Directrices para implementar igualdad y el operador de igualdad ( ==)

Para los tipos de valor (estructuras) " Implementar == cada vez que anule el método Equals "

Para los tipos de referencia (clases), " La mayoría de los tipos de referencia, incluso aquellos que implementan el método Equals, no deberían anular ==. " La excepción es para clases inmutables y aquellas con semántica de valor.

Además de todas las respuestas que ya están aquí, no olvide asegurarse de que GetHashCode () también sea coherente.

Si está anulando el método de igualdad y todavía quiere poder verificar la igualdad (o desigualdad), entonces probablemente también debería anular los métodos == y! =.

Sería recomendable, ya que sería inesperado si:

if (foo == bar)

... se comportó de manera diferente a:

if (foo.Equals(bar))

No es necesario, nadie te matará si no haces eso.

Sin embargo, tenga en cuenta que a menudo es más natural escribir (A == B) que A.Equals (B). Si proporciona ambos métodos, será más fácil para los consumidores de su código.

en A.Equals (B) A no puede ser nulo en A == B cualquiera puede ser nulo

Reemplazar == para hacer que llame a Equals me parece una idea generalmente mala para los tipos de referencia. Si anula == para hacer que llame a Equals, entonces no creo que un usuario de su código pueda probar si dos referencias de objeto se refieren exactamente al mismo objeto (en comparación con un objeto con propiedades iguales).

Si la gente quiere probar instancias de sus clases para la igualdad de valor, entonces seguramente deberían llamar a Equals, guardando == para probar la igualdad de referencia específicamente.

No es necesario, pero es algo inteligente.

Si está creando un marco y otro desarrollador que no sea el que va a usar el objeto, debe anular el == y! =. De esa manera, cuando un desarrollador puede usarlo, al menos tiene la lógica correcta para comparar los 2 objetos en lugar de simplemente ser los mismos en la memoria.

Me aseguraría de que su == & amp; ! = llama a tu método igual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top