2009-03-06 15 views
5

La sobrecarga del operador de comparación, cómo comparar si las dos variables apunta al mismo objeto (es decir. No valor)Después de sobrecargar al operador ==, ¿cómo comparar si dos variables apuntan al mismo objeto?

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); 
} 
+1

Intento evitar sobrecargar estos operadores para los tipos de referencia, ya que la mayoría de las personas esperan == probar la igualdad de objetos. –

Respuesta

8

Uso los Object.ReferenceEquals método estático.

Por supuesto, para que el método == y! = Retenga su funcionalidad completa, también debe anular Equals y GetHashCode para que devuelvan un conjunto coherente de respuestas a las personas que llaman.

4
+0

'ReferenceEquals (object, object)' es un método estático de la clase 'Object' y no se puede usar así a menos que se escriba un método de extensión para él. Para usarlo, uno debe llamar: 'object.ReferenceEquals (a, b)' –

4

Para comprobar si ambos puntos al mismo objeto. Debe usar el método Object.ReferenceEquals. Volverá a ser verdadero si ambos son iguales o si ambos son nulos. De lo contrario, devolverá falso

0

Sé que es una pregunta antigua, pero si va a sobrecargar el método == o Object.Equals, ¡también debe sobrecargar el operador inverso! =.

Y en este caso, como está comparando números internos, debe sobrecargar los otros operadores de comparación <,>, < =,> =.

Las personas que consumen 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 llamado inversión el condicional) y luego aplanarlo, para salir del síndrome de 25 si anidado. Si su código hace eso, y usted ha sobrecargado el operador == sin sobrecargar el operador! =, Podría cambiar el significado previsto de su código.

Cuestiones relacionadas