Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Atrybuty można stosować do typów ogólnych w taki sam sposób, jak typy niegeneryczne. Można jednak stosować atrybuty tylko dla otwartych typów ogólnych i zamkniętych skonstruowanych typów ogólnych, a nie w częściowo skonstruowanych typach ogólnych. Otwarty typ ogólny jest taki, w którym żaden z argumentów typu nie jest określony, taki jak Dictionary<TKey, TValue>
zamknięty skonstruowany typ ogólny określa wszystkie argumenty typu, takie jak Dictionary<string, object>
.
Częściowo skonstruowany typ ogólny określa niektóre, ale nie wszystkie argumenty typu. Może to być na przykład Dictionary<string, TValue>
. Niezwiązany typ ogólny to typ, w którym argumenty typu są pomijane, takie jak Dictionary<,>
.
W poniższych przykładach użyto tego atrybutu niestandardowego:
class CustomAttribute : Attribute
{
public object? info;
}
Atrybut może odwoływać się do niezwiązanego typu ogólnego:
public class GenericClass1<T> { }
[CustomAttribute(info = typeof(GenericClass1<>))]
class ClassA { }
Określ wiele parametrów typu przy użyciu odpowiedniej liczby przecinków. W tym przykładzie GenericClass2
mają dwa parametry typu:
public class GenericClass2<T, U> { }
[CustomAttribute(info = typeof(GenericClass2<,>))]
class ClassB { }
Atrybut może odwoływać się do zamkniętego skonstruowanego typu ogólnego:
public class GenericClass3<T, U, V> { }
[CustomAttribute(info = typeof(GenericClass3<int, double, string>))]
class ClassC { }
Atrybut, który odwołuje się do parametru typu ogólnego, powoduje błąd czasu kompilacji:
[CustomAttribute(info = typeof(GenericClass3<int, T, string>))] //Error CS0416
class ClassD<T> { }
Począwszy od języka C# 11, typ ogólny może dziedziczyć z Attributeklasy :
public class CustomGenericAttribute<T> : Attribute { } //Requires C# 11
Aby uzyskać informacje o typie ogólnym lub parametrze typu w czasie wykonywania, można użyć metod System.Reflection. Aby uzyskać więcej informacji, zobacz Ogólne i Odbicie.