我应该实现IEquatable还是IComparable?

时间:2014-01-18 00:29:27

标签: c# .net

我上课了。这个类要表示的事物是这样的,我们可以说这些事物彼此相等,我们也可能想出一个方案来对它们进行排名为了比较。

但是,很少有人觉得需要对这些事物进行排名,但通常需要检查两个这样的事物是否相等。< / p>

因此,我可以为我的班级和IEquatable实施IComparable。虽然IComparable提供了一些额外的功能,但是任何人都不太可能关心这个额外的功能。无论是在逻辑上还是在功能上,这两者似乎都没有提供明显的优势。

我应该实施哪个界面,IEquatableIComparable或两者兼而有之?为什么? (我特别想知道接口的框架范围的含义)

This question是相似的,但答案只说明显的,这对我没有帮助。

如果您想知道,该类意味着代表核苷酸。核苷酸可以很容易地等同,但也可以比较它们(例如按字母顺序)。

4 个答案:

答案 0 :(得分:8)

我肯定会实施IEquatable<T>但暂时不要IComparable / IComparable<T>

正如你所说,没有一种方法可以比较核苷酸。有人可能需要按字母顺序对它们进行比较,有人可能需要另一种方法对它们进行排序。我宁愿提供IComparer<Nucleotide>的不同实现来实现IComparable / IComparable<T>本身。

答案 1 :(得分:2)

这主要是基于意见的,但如果可比性不明显(如数量),我就不会实施IComparable。例如,如果有人想对核苷酸进行排序,它可以提供自己的IComparer实现。作为图书馆作者,我会提供一组可能的IComparer,例如按照你的说法按字母顺序对它们进行排序。

答案 2 :(得分:2)

如果对象本质上具有可比性,那么我会做额外的工作并在IComparable<T>之上实现IEquatable<T>。作为该类型的作者,您处于提供正确实现的最佳位置。将它留给另一个开发人员实施会增加发生以下事件的可能性

  • 他们错误地实施比较。其他开发人员可能不太熟悉数据,因此更有可能错过角落案例
  • 重复的cadoe。如果你没有提供事实上的比较,那么每个开发人员将分别自己做,导致重复代码

答案 3 :(得分:1)

您应该实现为您提供现在所需的界面。如果您以后发现IComparable是您需要的,那么请执行它。

要确定未来的证据可能很难。但是当添加额外的未来功能相对简单时,我总是选择不这样做。你可能会发现自己永远不需要IComparable,即使它只是一个小小的补充,它仍然需要维护和考虑。