2011-02-02 19 views
7

¿Es posible generar miembros con igualdad para una clase, que también incluiría miembros de su clase base?Resharper: genera miembros con igualdad, incluidos los miembros de la clase base

Por ejemplo - clase base abstracta:

public abstract class MyBaseClass 
{ 
    public int Property1; 
} 

Otra clase:

public class MyOtherClass: MyBaseClass 
{ 
    public int Property2 {get; set;} 
} 

Si AutoGenerate miembros de igualdad con ReSharper, consigo la igualdad basada sólo en MyOtherClass.Property2 propiedad y no también de Property1 de su clase base.

Respuesta

10

Primero genere verificaciones de igualdad en la clase base, luego hágalo en el descendiente.

En el descendiente, la diferencia estará en la clase public bool Equals(MyOtherClass other).

Sin comprobaciones de igualdad en la clase base:

public bool Equals(MyOtherClass other) 
{ 
    if (ReferenceEquals(null, other)) 
     return false; 
    if (ReferenceEquals(this, other)) 
     return true; 
    return other.Property2 == Property2; 
} 

Con igualdad controles en la clase base:

public bool Equals(MyOtherClass other) 
{ 
    if (ReferenceEquals(null, other)) 
     return false; 
    if (ReferenceEquals(this, other)) 
     return true; 
    return base.Equals(other) && other.Property2 == Property2; 
} 

Aviso la llamada añadido a base.Equals(other), que de este modo se convierte en responsable de las propiedades en la clase base.

Nota que si lo haces al revés, primero añada los controles de igualdad a la descendencia, y luego añadirlos a la clase base, a continuación, ReSharper no va y retroactivamente modifica el código en el descendiente, o tiene que regenerarlo (eliminar + generar) o modificar el código a mano.

+3

para regenerar, no necesita eliminar. Cuando genera, hay una opción para reemplazar miembros existentes. –

+0

Aha! Gracias por esa información. –

+0

De hecho, esto es lo que se genera hoy en Resharper (en la versión protegida del método Equals) – Ergodyne

Cuestiones relacionadas