【发布时间】:2015-06-30 12:25:16
【问题描述】:
我现在有点困惑。据我了解,.NET 运行时将选择最适合给定参数类型的重载方法。所以我认为,在方法@987654322@ 下方的sn-p 中,将永远不会使用Entry 类型的实例来调用。相反 - 因为存在具有正确参数类型的方法 Equals(Entry other) - 它将被调用。
documentation for IEquatable on MSDN 声明
如果您实现了 IEquatable,您还应该重写 Object.Equals(Object) 和 GetHashCode 的基类实现,以便它们的行为与 IEquatable.Equals 方法的行为一致。如果您确实重写了 Object.Equals(Object),那么在调用类上的静态 Equals(System.Object, System.Object) 方法时也会调用您重写的实现。
我的问题是:
- 下面的
Equals(object obj)方法永远不会被Entry类型的实例调用,对吗? - 那么在下面的
Equals(object obj)方法中只使用return false不够吗? - 如果是这样,为什么编译器不能将下面的注释行识别为不可访问?
我参考的代码:
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();
}
}
提前感谢您帮助我!
【问题讨论】:
标签: c# equality iequatable unreachable-code