我可以看到用于比较不同类的对象的用途,但我不认为 IComparable(of T) 是正确的基础。为了使这样的比较真正起作用,对象必须有一个共同的规范形式,这意味着它们都来自一个共同的祖先或实现一个共同的接口。我会进一步建议这个公共基础包括一个 SecondChanceCompareTo 方法,并且普通的比较方法应该,如果它不能识别它正在与之比较的精确类型,则将自己传递给传入对象的 SecondChanceCompare 方法。
作为这种类型的东西可能有用的一个例子,想象一个存储字符串的类族;一个字符串可能存储为一个简单的 String 对象,但一些字符串可能存储为一个字符和重复计数,其他可能存储为对更长字符串的引用以及起始偏移量和长度等。通过将两个字符串对象转换为类型“String”然后进行比较来比较两个字符串对象,但是在许多情况下存在更好的比较方法。例如,如果一个字符串存储为“Character 'Z' repeat 100,000 times”,而另一个字符串存储为“Literal string 'Dog'”,则前一个字符串可以通过观察后者的第一个字符是小于“Z”。
请注意,基本的“文字字符串”对象可能不知道如何将自己与“重复字符”字符串对象进行比较,除非将后者转换为文字字符串(昂贵的操作),但它可以调用后者的“SecondChanceCompare”方法,它将知道如何将自己与文字字符串进行比较。