2011-02-02 2 views
7

클래스에 대한 평등 멤버를 생성 할 수 있습니까? 클래스에는 기본 클래스의 멤버도 포함될 수 있습니까?Resharper - 기본 클래스 멤버를 포함한 평등 멤버 생성

예를 들어 - 추상 기본 클래스 :

public abstract class MyBaseClass 
{ 
    public int Property1; 
} 

다른 클래스 :

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

내가 ReSharper에서와 평등의 구성원을 자동 생성하는 경우, 내가에서 Property1에없는 또한 단지 MyOtherClass.Property2 속성을 기준으로 평등을 얻을 그 기본 클래스.

답변

10

먼저 기본 클래스에서 등호 검사를 생성 한 다음 하위 테스트에서 수행합니다.

자손에서 차이는 public bool Equals(MyOtherClass other) 클래스에 있습니다.

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

공지 따라서 특성에 대한 책임이된다 base.Equals(other)에 추가 전화 : 기본 클래스의 평등 검사와

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

: 기본 클래스의 평등을 확인하지 않고

기본 클래스

만약 당신이 다른 방식으로 할 경우, 먼저 후손으로 평등 검사를 추가 한 다음 기본 클래스에 추가합니다, 다음 ReSharper에서이 이동하지 않고 소급 후손의 코드를 수정, 다시 생성 (delete + generate)하거나 코드를 직접 수정해야합니다.

+3

을 재생성하려면 삭제할 필요가 없습니다. 생성 할 때 기존 멤버를 대체 할 수있는 옵션이 있습니다. –

+0

아하! 그 정보를 가져 주셔서 감사합니다. –

+0

Infact, 이것은 Resharper에서 오늘 (Equals 메서드의 보호 된 버전에서) 생성되는 것입니다. – Ergodyne