[英]How to forcibly call interface implemented method?
考虑到:EqualityComparer.Default属性,用MSDN编写,它具有:
Default属性检查类型T是否实现System.IEquatable接口,如果是,则返回使用该实现的EqualityComparer。 否则,它返回一个EqualityComparer,它使用T提供的Object.Equals和Object.GetHashCode的替代。
我的理解:因为它将返回EqualityComparer“ object”,所以它应该调用T提供的Object.Equals和Object.GetHashCode的重写(如果它重写或Object.Equals和Object.GetHashCode,否则)。 如何称其为IEquatable的实现方法? 它是在强行吗? 如果是,如何? 如果我错了请纠正我。
这是MSDN链接: http : //msdn.microsoft.com/zh-cn/library/ms224763.aspx
首先,在如下的通用类中,实际上无论如何都会选择正确的方法( IEquatable<T>
):
private class MyEqualityComparer<T> : IEqualityComparer<T> where T : IEquatable<T>
{
public bool Equals(T x, T y)
{
return x.Equals(y);
}
// Hashcode...
}
而如果将y投射到object
,则引用将是object.Equals
。 这只是一个重载方法,因此可以在编译时解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.