C# のジェネリック クラスの利点は、型に制約を設定できるため、いくつかの制約を満たす型のみが受け入れられることです。例えば:
public class Foo<T> where T : Bar, IBaz, IFoobar {
public Foo (T value) {
//initialize
}
}
これはT
、記述された 3 つのクラスから派生した型とのみ統合できることを意味します。
メソッドを使用する場合、メソッドをジェネリックにすることもできます。しかし、コンストラクターでそのような制約を指定できないのはなぜだろうと思っていました。例えば:
public class Foo {
public Foo (Bar & IBaz & IFoobar value) {
//initialize (the "&" syntax is just an example)
}
}
value
クラスをジェネリックにすることもできますが、コンストラクターだけが を使用し、クラスの他のメソッドが に依存しない場合、これはかなり面倒ですT
。ジェネリック クラスでは解決が難しい問題もあります。たとえばSomeComparer<T,Q> : IComparer<Foo<T>,Foo<Q>>
、実際にはまったくジェネリックではないジェネリック クラスの負荷を導入する比較子を作成する必要があります。
型システムは引数がすべての型制約を満たしているかどうかを簡単にチェックできるため、これが実装されていない理由がわかりません。
C# 言語仕様で結合型を定義しないという引数は何ですか?