2011-01-11 5 views

答えて

4

はい、Tにいくつかの制約を加えることができます。制約はwhere節で導入されています。チェックhere

where T: struct 

type引数は値型でなければなりません。 Nullableを除く任意の値型を指定できます。詳細については、Nullable型の使用(C#プログラミングガイド)を参照してください。

where T: class 

type引数は参照型でなければなりません。これは、どのクラス、インタフェース、デリゲート、または配列型にも当てはまります。

where T : new() 

type引数には、パラメータのないパブリックコンストラクタが必要です。他の制約と一緒に使用する場合、new()制約は最後に指定する必要があります。

where T : <base class name> 

type引数は、指定された基本クラスであるか、派生している必要があります。

where T : <interface name> 

type引数は、指定されたインターフェイスであるか、または実装されている必要があります。複数のインタフェース制約を指定できます。制約インターフェースはまた、一般的であり得る。 Tのために供給

where T : U 

型引数があるか、またはU.

例えば
+0

私はそこにあなたの基本的なクラスとインタフェース名の例で山括弧を使用することに注意したいでしょう:) –

+0

@Tim Barrassあなたが正しいです、 '' => ' MyClass' – nan

+0

MSDNのために十分であれば... –

2

genericパラメータconstraintsを参照してください。独自のジェネリック型とメソッドを作成する場合、制約によって型パラメータに関するいくつかのルールを適用できます。彼らは必要なインターフェースをサポートしているか、デフォルトのコンストラクターを持っています。

3

基本的

public class MyClass<T> where T : ISomeInterface 

ために与えられた引数から派生しなければなりません。余分な詳細についてはthis oneのような既存のSOの質問もたくさんあります。

関連する問題