次の方法で共有


ジェネリックと属性 (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# プログラミング ガイド)」を参照してください。

参照

参照

ジェネリック (C# プログラミング ガイド)

概念

C# プログラミング ガイド

属性を使用したメタデータの拡張