簡體   English   中英

class在Castle.Core中實現了IProxyGenerationHook,如何實現Equals和GetHashCode的override方法?

[英]How to implement the override methods of Equals and GetHashCode in a class that implements IProxyGenerationHook in Castle.Core?

閱讀 Castle.Core 文檔,在此鏈接中,他們建議始終覆蓋實現IProxyGenerationHook的類的EqualsGetHashCode方法。

我有一個名為MiHook的 class 實現了這樣的接口,但是這個 class 沒有 state。所以,我的問題是,如果我有一個無狀態的 class,我應該如何覆蓋這兩個方法?

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();
}

我不確定無狀態 class 是什么意思 - 您是說它沒有任何字段嗎? 什么是無狀態 class?

您示例中的基本實現與根本不覆蓋一樣好。 你需要問自己一個問題:

什么使 MiHook 類型的兩個對象相等?

從您對ShouldInterceptMethod的實施來看,它是類型( IFoo.Bar )。 如果是這樣的話,我會 go 一個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

在 Glimpse 項目中,IProxyGenerationHook 也被覆蓋。 盡管他們仍然有一個私有字段用於覆蓋 GetHashCode 和 Equals:

private IEnumerable<IAlternateMethod> methodImplementations;

這是包含方法 GetHashCode 和 Equals 的源文件的鏈接。

也許它是有用的靈感來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM