ジェネリックと属性
属性は、非ジェネリック型の場合と同様に、ジェネリック型に適用できます。 ただし、属性は、"部分的な構築ジェネリック型" ではなく、"オープン ジェネリック型" と "クローズ構築ジェネリック型" にのみ適用できます。 "オープン ジェネリック型" は、Dictionary<TKey, TValue>
のように型引数が指定されていない型です。"クローズ構築ジェネリック型" は、Dictionary<string, object>
のようにすべての型引数を指定します。 "部分的な構築ジェネリック型" は、一部の型引数を指定しますが、すべてではありません。 たとえば Dictionary<string, TValue>
です。
次の例では、このカスタム属性が使用されています。
class CustomAttribute : Attribute
{
public 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 CS0416
class ClassD<T> { }
C# 11 以降では、ジェネリック型は Attribute から継承できます。
public class CustomGenericAttribute<T> : Attribute { } //Requires C# 11
実行時にジェネリック型または型パラメーターに関する情報を取得するには、System.Reflection のメソッドを利用できます。 詳細については、「ジェネリックとリフレクション」を参照してください。
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示