ジェネリック型の型パラメーター (C# プログラミング ガイド)
ジェネリック型またはジェネリック メソッドの定義では、型パラメーターは、ジェネリック型の変数をインスタンス化するときにクライアントが指定する、特定の型のプレースホルダーです。 「ジェネリックの概要 (C# プログラミング ガイド)」に紹介されている GenericList<T> などのジェネリック クラスは、実際のところ型ではなく、型の設計図のようなものなので、そのままでは使用できません。 GenericList<T> を使用するには、クライアント コードで、山かっこ内に型の引数を指定して構築型を宣言し、インスタンス化する必要があります。 この特定クラスの型の引数には、コンパイラで認識される任意の型を使用できます。 構築型のインスタンスはいくつでも作成できます。また、それぞれに対して、次のように異なる型の引数を使用できます。
GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();
この GenericList<T> の各インスタンスでは、クラスで T が発生すると、実行時に型の引数で置換されます。 この置換を利用して、単一のクラス定義を使用したタイプ セーフで効率的なオブジェクトを 3 つ作成しました。 この置換を CLR で実行する方法の詳細については、「ランタイムのジェネリック (C# プログラミング ガイド)」を参照してください。
型パラメーターの名前付けのガイドライン
1 文字の名前だけで理解でき、追加の文字が必要ない場合を除き、ジェネリック型の型パラメーターには、わかりやすい名前を付けます。
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
1 文字の型パラメーターを持つ型である場合、型パラメーター名として T を使用することを検討します。
public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
わかりやすい型パラメーター名の前に "T" を付けます。
public interface ISessionChannel<TSession> { TSession Session { get; } }
パラメーターの名前に型パラメーターに関する制約を指定することを検討します。 たとえば、ISession に制約されるパラメーターである場合、TSession と指定します。
参照
関連項目
C++ テンプレートと C# ジェネリックの違い (C# プログラミング ガイド)