定義:の定義ではジェネリック医薬品、我々は使用することができます どこ 制限パラメータの範囲を。
使用:使用ジェネリックの時間は、あなたが尊重しなければならない 制限パラメータ範囲のを、またはコンパイラは渡しません。
制約の6種類:
T:クラス(タイプパラメータが参照型である必要があり、これは、任意のクラス、インタフェース、デリゲート、またはアレイタイプに適用されます。)
MyClassのクラス<T、U> WHERE T:クラスパラメータT ///制約は、 "参照タイプは{}"しなければならない WHERE U:U構造体///制約パラメータは、 "値型"でなければなりません } {
T:構造(値型パラメータでなければならないタイプNULL可能にタイプ以外の任意の値を指定することができます。)
MyClassのクラス<T、U> WHERE T:クラスパラメータT ///制約は、 "参照タイプは{}"しなければならない WHERE U:U構造体///制約パラメータは、 "値型"でなければなりません } {
T:新新() (他の制約と組み合わせて使用するタイプのパラメータは、無料の公共コンストラクタのパラメータを持っている必要があり、新しい()制約は、最後に指定する必要があります。)
クラスにEmployeeList <T> T:従業員、IEmployee、System.IComparable <T>、新しい() { // ... }
T:<基本クラス名>(typeパラメータは、基本クラスで指定された、または指定された基底クラスから派生しなければなりません。)
パブリッククラスEmployee {} publicクラスGenericList <T> T:従業員
T:<インタフェース名>(Typeパラメータは、インターフェイスを指定またはインタフェースが一般的で制約があってもよい複数のインタフェースを指定することができる指定されたインタフェースを実装しなければなりません)
/// <要約> ///接口 /// </要約> インターフェイスIMyInterfaceという { } /// <要約> ///定义的一个字典类型 /// </要約> /// <typeparam名=」処理鍵"> </ typeparam> /// <typeparam名=" TVAL "> </ typeparam> クラス辞典<処理鍵、TVAL> どこ処理鍵:IComparableを、IEnumerableを IMyInterfaceという:TVALどこ { 公共ボイドは(処理鍵キー、TVALのval)を追加します。 { } }
T:U(パラメータ・タイプパラメータTはU-提供またはUのために提供されるパラメータに由来するために提供されなければならない。T及びUのパラメータが同じでなければならないこと)
クラスリスト<T> { ボイド追加<U>(一覧<U>項目)ここで、U:T {/*...*/} }
まず、クラスを使用することができます:
パブリッククラスMyGenericClass <T> T:IComparableを{}
第二に、この方法を使用することができます。
パブリックブールMyMethodは<T>(T T)ここで、T:IMyInterfaceという{}
第三に、欧州委員会は、次の目的で使用できます。
デリゲートT MyDelegate <T>()ここで、T:新しいです()