Generics e attributi (Guida per programmatori C#)

Non è possibile applicare attributi a tipi generici con modalità simili a quelle previste per i tipi non generici. Per ulteriori informazioni sull'applicazione degli attributi, vedere Attributi (C# e Visual Basic).

Gli attributi personalizzati possono fare riferimento solo a tipi generici aperti, ovvero tipi generici per i quali non vengono forniti argomenti di tipo, nonché a tipi generici costruiti chiusi, che forniscono gli argomenti per tutti i parametri di tipo.

Negli esempi riportati di seguito viene utilizzato questo attributo personalizzato:

class CustomAttribute : System.Attribute
{
    public System.Object info;
}

Un attributo può fare riferimento a un tipo generico aperto:

public class GenericClass1<T> { }

[CustomAttribute(info = typeof(GenericClass1<>))]
class ClassA { }

Specificare più parametri di tipo utilizzando il numero appropriato di virgole. In questo esempio GenericClass2 ha due parametri di tipo:

public class GenericClass2<T, U> { }

[CustomAttribute(info = typeof(GenericClass2<,>))]
class ClassB { }

Un attributo può fare riferimento a un tipo generico costruito chiuso:

public class GenericClass3<T, U, V> { }

[CustomAttribute(info = typeof(GenericClass3<int, double, string>))]
class ClassC { }

Un attributo che fa riferimento a un parametro di tipo generico genererà un errore in fase di compilazione:

//[CustomAttribute(info = typeof(GenericClass3<int, T, string>))]  //Error
class ClassD<T> { }

Un tipo generico non può ereditare da Attribute:

//public class CustomAtt<T> : System.Attribute {}  //Error

Per ottenere informazioni su un tipo generico o un parametro di tipo generico in fase di esecuzione, è possibile utilizzare i metodi di System.Reflection. Per ulteriori informazioni, vedere Generics e reflection (Guida per programmatori C#).

Vedere anche

Riferimenti

Generics (Guida per programmatori C#)

Concetti

Guida per programmatori C#

Estensione di metadati mediante attributi