ジェネリック型の型パラメーター (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 で実行されるしくみについては、「ランタイムのジェネリック」を参照してください。

型パラメーターの名前付けガイドライン

  • 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 にします。

コード分析規則 CA1715 を使用して、型パラメーターの名前が適切に付けられていることを確認できます。

関連項目