2

私はジェネリッククラスを作ろうとしています。IComparable実装するオブジェクトのみをジェネリックに渡すことができるように制約を作成する方法はありますか? 例えば:

public class MyClass<T>
{

}

public class MyFooClass
{
}

public class MyComparableFooClass : IComparable
{
    public int Compare(MyComparableFooClass q) 
    { 
        return 0;
    }
}

public class MyMainClass()
{
    private MyClass<int> _myIntClass; // This is okay since int implements IComparable
    private MyClass<MyComparableFooClass> _myComparableFooClass // This should be okay too since int implements IComparable
    private MyClass<MyFooClass> _myFooClass; // This should get a compile error since MyFooClass doesn't implement IComparable
}

うまくいけば、私の例は明確です。MyClass<T>を実装するオブジェクトを許可したいだけですIComparablewhere私が間違っていなければ、制約はクラスでのみ機能することを理解しています。これは可能ですか、または誰かが回避策を提供できますか?

4

2 に答える 2

4

ジェネリック制約はインターフェースでも機能します。ドキュメントから

ここで、T:class type引数は、クラス、インターフェイス、デリゲート、または配列型を含む参照型である必要があります。

whereしたがって、次のキーワードを使用できますIComparable

public class MyClass<T> where T : IComparable
{

}
于 2012-10-16T05:16:25.120 に答える
3

Genericはインターフェースでも機能します:

public class MyClass<T> where T: IComparable
{
}
于 2012-10-16T05:16:22.537 に答える