我现在有点困惑。据我了解,.NET 运行时将选择最适合给定参数类型的重载方法。所以我认为,在下面的代码片段中,Equals(object obj)
永远不会使用 type 的实例调用该方法Entry
。相反 - 因为存在Equals(Entry other)
具有正确参数类型的方法 - 它将被调用。
如果您实现 IEquatable,您还应该重写 Object.Equals(Object) 和 GetHashCode 的基类实现,以便它们的行为与 IEquatable.Equals 方法的行为一致。如果您确实重写了 Object.Equals(Object),那么在调用类上的静态 Equals(System.Object, System.Object) 方法时也会调用您重写的实现。
我的问题是:
- 是否正确,
Equals(object obj)
永远不会使用 type 的实例调用下面的方法Entry
? return false
那么仅仅在Equals(object obj)
下面的方法中就足够了吗?- 如果是这样,为什么编译器不将下面的注释行识别为无法访问?
我参考的代码:
sealed class Entry : IEquatable<Entry> {
...
// Overrides Object.Equals
public override bool Equals(object obj)
{
if (obj is Entry)
{
return this.Equals(obj as Entry); // Is this code reachable?
}
return false;
}
// Implements IEquatable<Entry>.Equals
public bool Equals(Entry other)
{
return this.Hash.Equals(other.Hash)
&& this.Path.Equals(other.Path)
&& this.Order.Equals(other.Order);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
提前感谢您帮助我!