Creare attributi generici in C#

di Stefano Mostarda, in .NET Framework,

Molto spesso capita di avere attributi di cui dobbiamo impostare una proprietà di tipo Type. A partire dalla versione 11, C# permette di creare attributi che accettano un parametro generico sostituendo la proprietà di tipo Type.

public class GenericAttribute<T> : Attribute { }

public class MyClass 
{
  [MyGenericAttribute<string>()]
  public void Method() 
  {
    //code
  } 
}

Quando usiamo questa funzionalità dobbiamo tenere presente che ci sono alcune limitazioni. La prima è che visto che gli attributi devono essere completi già a design time, non possiamo usare parametri generici ereditati dalla classe. Per fare un esempio, il seguente codice non è valido.

public class GenericType<T>
{
  [GenericAttribute<T>()] // Errore
  public void Method() 
  {
    //code
  } 
}

Un'altra limitazione è che alcuni tipi non sono direttamente supportati come dynamic, i tipi nullabili e le tuple. Questi possono essere sostituiti con tipi simili, come object per dynamic, string per string? (e lo stesso per tutti i tipi nullable), e ValueTuple<> per le tuple.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi