이 링크 에서 Castle.Core 문서를 읽으면 .NET Framework 를 구현하는 클래스 의 및 메서드 를 항상 재정의하는 것이 좋습니다 .Equals
GetHashCode
IProxyGenerationHook
나는 클래스가 호출이 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] 삭제
몇 마디 만하겠습니다