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);
}
¿Fue útil?

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

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.

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