如何强制调用接口实现的方法?

时间:2013-01-30 12:20:32

标签: c#

考虑: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/en-us/library/ms224763.aspx

1 个答案:

答案 0 :(得分:0)

首先,在如下的泛型类中,实际上会选择正确的方法(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。这只是一个重载方法,因此在编译时解决。