Castle.Core에서 IProxyGenerationHook을 구현하는 클래스에서 Equals 및 GetHashCode의 재정의 메서드를 구현하는 방법은 무엇입니까?

말론 초 스키

이 링크 에서 Castle.Core 문서를 읽으면 .NET Framework 를 구현하는 클래스 메서드 항상 재정의하는 것이 좋습니다 .EqualsGetHashCodeIProxyGenerationHook

나는 클래스가 호출이 MiHook같은 인터페이스가 구현을하지만,이 클래스는 상태가 없습니다. 제 질문은 상태 비 저장 클래스가있는 경우이 두 메서드를 어떻게 재정의해야합니까?

public class MiHook : IProxyGenerationHook {
    public void MethodsInspected() { }

    public void NonProxyableMemberNotification(Type type, MemberInfo memberInfo) { }

    public bool ShouldInterceptMethod(Type type, MethodInfo methodInfo) {
        return methodInfo.Name == nameof(IFoo.Bar);
    }

    // Should I implement both methods like this?
    public override bool Equals(object? obj) => base.Equals(obj);
    public override int GetHashCode() => base.GetHashCode();
}
지아 렉

상태 비 저장 클래스가 무엇을 의미하는지 잘 모르겠습니다. 필드가 없다는 뜻입니까? 무국적 클래스 란 무엇입니까?

예제의 기본 구현은 전혀 재정의하지 않는 것만 큼 좋습니다. 스스로에게 질문해야합니다.

MiHook 유형의 두 개체를 동일하게 만드는 것은 무엇입니까?

구현에 ShouldInterceptMethod따라 Type ( IFoo.Bar) 판단됩니다 . 이 경우 IFoo.Bar"종속"재정의를 수행합니다.

   public class MiHook : IProxyGenerationHook
    {
        public void MethodsInspected() { }
        public void NonProxyableMemberNotification(Type type, MemberInfo memberInfo) { }
        public bool ShouldInterceptMethod(Type type, MethodInfo methodInfo)
        {
            return methodInfo.Name == nameof(IFoo.Bar);
        }
        public override bool Equals(object obj)
        {
            if (obj == null || obj.GetType() != this.GetType()) return false;
            return obj.GetHashCode() == this.GetHashCode();
        }
        public override int GetHashCode() => typeof(IFoo.Bar).GetHashCode();
    }

테스트하려면 :

var mh1 = new MiHook<Foo.Bar>();
var mh2 = new MiHook<Foo.Bar>();
Console.WriteLine(mh1.Equals(mh2)); //True
//your implementation returns False

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관