IEqualityComparer与EqualityComparer有什么区别?

11
我已经阅读了这篇post,但它并没有回答我的问题。
MSDN

我们建议您从EqualityComparer(Of T)类派生,而不是实现IEqualityComparer(Of T)接口,因为EqualityComparer(Of T)类使用IEquatable(Of T).Equals方法而不是Object.Equals方法来测试相等性。

但如果我查看实现,它们都使用通用类型:
 public class AAA:IEqualityComparer<Box>
    {
        public bool Equals(Box x, Box y)
        {
        }

        public int GetHashCode(Box obj)
        {
        }
    }

    public class BBB : EqualityComparer<Box>
    {
        public override bool Equals(Box x, Box y)
        {
        }

        public override int GetHashCode(Box obj)
        {
        }
    }

我错过了什么?

3
不知道。那个陈述对我来说没有意义。 - CodesInChaos
其他问题的答案已经解释了这个语句没有意义。所以我不明白你对这个问题有什么期望。 - CodesInChaos
4
可能是[Preferring EqualityComparer<T> to IEqualityComparer<T>]的重复问题。 - CodesInChaos
@CodeInChaos,你看过那里的答案吗?它们中没有一个是严格的答案...被接受的答案解释了比较接口,并假设它可能与相等有关...jOn Skeet对他的第一个问题也不知道。所以你的重复投票是因为没有阅读。 - Royi Namir
7
我将这些答案理解为“该陈述是无意义的废话”,只是他们用了更礼貌的方式来表达。虽然MSDN是一个有价值的资源,但不要将MSDN上说的每件事都视为真理。MSDN包含很多错误的建议、过时的、糟糕的或者纯属错误的内容。 - CodesInChaos
@RoyiNamir,EqualityComparer<T>实现了IEqualityComparer的泛型和非泛型版本。这是我能看到的唯一区别。 - Karthik D V
1个回答

4
我认为你提到的另一篇文章是在说EqualityComparer<Box>实现了IEqualityComparer<Box>IEqualityComparer,所以如果你从EqualityComparer<Box>派生,就不必同时实现通用和非通用接口。请参考这篇文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接