ジェネリックと属性 (C# プログラミング ガイド)
属性は、非ジェネリック型と同じ方法でジェネリック型に適用できます。 属性の適用の詳細については、「属性 (C# および Visual Basic)」を参照してください。
カスタム属性は、オープン ジェネリック型のみを参照できます。オープン ジェネリック型は、型引数が与えられていないジェネリック型です。クローズ構築ジェネリック型は、すべての型パラメーターに引数が与えられています。
次の例では、このカスタム属性を使用しています。
class CustomAttribute : System.Attribute
{
public System.Object info;
}
属性は、次のようにオープン ジェネリック型を参照できます。
public class GenericClass1<T> { }
[CustomAttribute(info = typeof(GenericClass1<>))]
class ClassA { }
適切な数のコンマを使用して複数の型パラメーターを指定します。 この例では、GenericClass2 に 2 つの型パラメーターがあります。
public class GenericClass2<T, U> { }
[CustomAttribute(info = typeof(GenericClass2<,>))]
class ClassB { }
属性は、クローズ構築ジェネリック型を参照できます。
public class GenericClass3<T, U, V> { }
[CustomAttribute(info = typeof(GenericClass3<int, double, string>))]
class ClassC { }
ジェネリック型のパラメーターを参照する属性は、コンパイル時のエラーを発生させます。
//[CustomAttribute(info = typeof(GenericClass3<int, T, string>))] //Error
class ClassD<T> { }
ジェネリック型は Attribute から継承できません。
//public class CustomAtt<T> : System.Attribute {} //Error
ジェネリック型または型パラメーターに関する情報を実行時に取得するには、System.Reflection というメソッドを使用できます。 詳細については、「ジェネリックとリフレクション (C# プログラミング ガイド)」を参照してください。