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#)