【发布时间】:2021-04-18 17:06:39
【问题描述】:
阅读 this link 中的 Castle.Core 文档,他们建议始终覆盖实现 @987654324 的类的 Equals 和 GetHashCode 方法@。
我有一个名为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();
}
【问题讨论】:
-
该类没有字段,因此没有状态,您无法有意义地覆盖 GetHashCode()。 Object.GetHashCode() 没什么问题,它生成的哈希非常好。怀疑引用的建议是否明智,我不知道该库,但我无法想象您创建了该类的多个实例。
-
@HansPassant 是的,创建多个对象实例的情况很少见,但最好考虑一下说明,因为文档没有指定如何实现这两种方法。
标签: c# equals castle-dynamicproxy gethashcode