現在、すべての重要なクラスがインターフェイスを実装するように、コードをリファクタリングしています(単体テスタビリティ用)。私はIComparable(テンプレートなし)を実装するクラスに出くわしました。次のようなものがあります。ジェネリックスがインターフェイスに基づいているインターフェイスを実装する
public MyClass : IComparable
{
public int CompareTo(object obj)
{
MyClass cObj = obj as MyClass;
if (cObj == null) { throw new ArgumentException(); }
// etc.
}
}
私はそれを使いながらジェネリックを使いたいと思っています。このような何か:
public IMyClass : IComparable<IMyClass>
{
// Other methods here
}
public MyClass : IMyClass
{
public CompareTo<IMyClass>(IMyClass other)
{
...
}
// Other methods here
}
しかし、その後、理想的には、MyClass
はIComparable<MyClass>
(その後、MyClass
のサブクラスが実装すべきIComparable<MySubClass>
)を実装する必要があります。あなたは、私が説明したアプローチをどう思いますか
:
このすべて
には、いくつかの質問をするには?このリファクタリングを行うためのより良い方法はありますか?MyClass
にも
IComparable<MyClass>
を実装するという点がありますか?それとも、既に
IComparable<IMyClass>
を実装しているので意味がありませんか?私が知っていることができるプロのヒントや「ベストな」プラクティスは?
あなたの経験則に同意しているかどうかわかりません - 私がこれをインターフェイスする理由は、それを使用する単体テストクラスです。それは私がこのクラスを模擬することができることを意味します(間違いなく、あなたが私が単体テストでそれを実装するので、あなたの経験則に同意することを意味します)。 – Smashery
@Smashery:あなたのユースケースはそれほど明確ではありませんでした。これは、「ルールに従う」インターフェイスを完全に有効に使用することです。 :-) –