ジェネリック型の型パラメータ (C# プログラミング ガイド)
更新 : 2007 年 11 月
ジェネリック型またはジェネリック メソッドの定義では、型パラメータは、ジェネリック型の変数をインスタンス化するときにクライアントが指定する、特定の型のプレースホルダです。「ジェネリックの概要 (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 と指定します。