2014-09-24 3 views
1

에IEquatable 따라서, ID을 노출해야하는 엔티티에 대한 인터페이스가 있습니다. 실체가 정체성 및 전반적인하지 서명으로 비교해야하기 때문에인터페이스

public interface IEntity<TIdentity> { 
    public TIdentity Id { get; } 
} 

지금 내가 EqualsGetHashCode의 기본 구현에 의존 할 수없는 서로 두 기관을 비교할 수 있어야하지만, . IEntity<'1>을 구현하는 모든 클래스는 비교 가능해야하므로 엔티티 인터페이스에서 직접 IEquatable<'1>을 선언 할 것을 고려했습니다.

음 .. 그게 작동하지 않습니다. 내가 IEntity<'1>IEquatable<'1>를 선언 할 때 인터페이스가 다음 구현하는 클래스를 구현 적용 : 그래서 두 기관에 Equals 호출에 대신

public bool Equals(TypeImplementingIEntity other) 

public bool Equals(IEntity<'1> other) 

, 런타임은 Equals(object obj) 다시 참조하기 때문에 유형 IEquatable<'1>에서 제공하는 메소드의 인수가 실제 유형과 일치하지 않습니다. 뭐라구?

답변

2

정상 작동합니다. Equals(IEntity<TIdentity>) 당신은 어쨌든 Equals(object)를 오버라이드 (override) 할 필요가 Equals(object)

보다 우선해야합니다

public override bool Equals(object other) { 
    return Equals(other as IEntity<TIdentity>); 
} 
+0

을 [이]에 따르면 (http://stackoverflow.com/questions/371328/why-is-it-important-to- override-gethashcode-equals-method-over-over 일 때)'GetHashCode()'도 역시 오버라이드하는 것이 중요하다. –

+0

네, 그래야하지만,이 질문에 관한 것이 아니기 때문에 나는 언급하지 않았습니다. –