我上课了。这个类要表示的事物是这样的,我们可以说这些事物彼此相等,我们也可能想出一个方案来对它们进行排名为了比较。
但是,很少有人觉得需要对这些事物进行排名,但通常需要检查两个这样的事物是否相等。< / p>
因此,我可以为我的班级和IEquatable
实施IComparable
。虽然IComparable
提供了一些额外的功能,但是任何人都不太可能关心这个额外的功能。无论是在逻辑上还是在功能上,这两者似乎都没有提供明显的优势。
我应该实施哪个界面,IEquatable
,IComparable
或两者兼而有之?为什么? (我特别想知道接口的框架范围的含义)
This question是相似的,但答案只说明显的,这对我没有帮助。
如果您想知道,该类意味着代表核苷酸。核苷酸可以很容易地等同,但也可以比较它们(例如按字母顺序)。
答案 0 :(得分:8)
我肯定会实施IEquatable<T>
但暂时不要IComparable
/ IComparable<T>
。
正如你所说,没有一种方法可以比较核苷酸。有人可能需要按字母顺序对它们进行比较,有人可能需要另一种方法对它们进行排序。我宁愿提供IComparer<Nucleotide>
的不同实现来实现IComparable
/ IComparable<T>
本身。
答案 1 :(得分:2)
这主要是基于意见的,但如果可比性不明显(如数量),我就不会实施IComparable
。例如,如果有人想对核苷酸进行排序,它可以提供自己的IComparer
实现。作为图书馆作者,我会提供一组可能的IComparer
,例如按照你的说法按字母顺序对它们进行排序。
答案 2 :(得分:2)
如果对象本质上具有可比性,那么我会做额外的工作并在IComparable<T>
之上实现IEquatable<T>
。作为该类型的作者,您处于提供正确实现的最佳位置。将它留给另一个开发人员实施会增加发生以下事件的可能性
答案 3 :(得分:1)
您应该实现为您提供现在所需的界面。如果您以后发现IComparable
是您需要的,那么请执行它。
要确定未来的证据可能很难。但是当添加额外的未来功能相对简单时,我总是选择不这样做。你可能会发现自己永远不需要IComparable
,即使它只是一个小小的补充,它仍然需要维护和考虑。