Después de sobrecargar el operador ==, ¿cómo comparar si dos variables apuntan al mismo objeto?
-
03-07-2019 - |
Pregunta
Sobrecargando el operador de comparación, cómo comparar si las dos variables apuntan al mismo objeto (es decir, no valor)
public static bool operator ==(Landscape a, Landscape b)
{
return a.Width == b.Width && a.Height == b.Height;
}
public static bool operator !=(Landscape a, Landscape b)
{
return !(a.Width == b.Width && a.Height == b.Height);
}
Solución
Utilice el método estático Object.ReferenceEquals.
Por supuesto, para que el método == y! = conserve su funcionalidad completa, también debe anular Equals y GetHashCode para que devuelvan un conjunto coherente de respuestas a las personas que llaman.
Otros consejos
Pruebe a.ReferenceEquals(b);
Para verificar si ambos apuntan al mismo objeto. Debe usar el método Object.ReferenceEquals. Volverá verdadero si ambos son iguales o si ambos son nulos. De lo contrario, devolverá falso
Sé que es una pregunta antigua, pero si vas a sobrecargar el método == u Object.Equals, ¡también deberías sobrecargar el operador inverso! =.
Y en este caso, dado que está comparando números internos, debe sobrecargar los otros operadores de comparación < ;, > ;, < =, > =.
Las personas que consuman su clase en el futuro, ya sean consumidores externos o desarrolladores que se hagan cargo de su código, pueden usar algo como CodeRush o Refactor, que automáticamente & "; voltear &" ; la lógica (también llamada revertir el condicional) y luego aplanarla, para salir del síndrome del if anidado. Si su código hace eso, y ha sobrecargado el operador == sin sobrecargar el operador! =, Podría cambiar el significado previsto de su código.