異なるクラスのオブジェクトを比較するための使用法を見ることができますが、IComparable(of T)が正しい根拠ではないと思います。このような比較が実際に機能するためには、オブジェクトが共通の標準形である必要があります。これは、すべてのオブジェクトが共通の祖先から派生しているか、共通のインターフェースを実装していることを意味します。さらに、この共通ベースにはSecondChanceCompareToメソッドが含まれていることをお勧めします。通常の比較メソッドは、比較対象の正確なタイプを認識しない場合は、渡されたオブジェクトのSecondChanceCompareメソッドに自分自身を渡す必要があります。
このタイプのものが役立つ可能性がある場所の例として、文字列を格納するクラスのファミリーを想像してください。文字列は単純なStringオブジェクトとして格納される場合がありますが、文字と繰り返し回数として格納される文字列もあれば、開始オフセットと長さなどとともに長い文字列への参照として格納される文字列もあります。 2つの文字列オブジェクトを「String」タイプに変換してから比較することで比較しますが、より良い比較手段が存在するシナリオはたくさんあります。たとえば、一方の文字列が「文字'Z'が100,000回繰り返される」として保存され、もう一方の文字列が「リテラル文字列' Dog'」として保存される場合、前者の文字列は、後者の最初の文字が'Z'未満。
基本的な「リテラル文字列」オブジェクトは、「繰り返し文字」文字列オブジェクトをリテラル文字列に変換する(コストのかかる操作)以外は、それ自体を「繰り返し文字」文字列オブジェクトと比較する方法を知らない場合がありますが、後者の「SecondChanceCompare」メソッドを呼び出すことはできます。これは、それ自体をリテラル文字列と比較する方法を知っています。