Condividi tramite


Utilizzo di attributi (Guida per programmatori C#)

Aggiornamento: novembre 2007

È possibile utilizzare attributi in quasi tutte le dichiarazioni, anche se la validità di un attributo specifico può essere ristretta ad alcuni tipi di dichiarazione. Dal punto di vista sintattico, un attributo viene specificato inserendo il nome dell'attributo stesso, racchiuso tra parentesi quadre, davanti alla dichiarazione dell'entità a cui l'attributo si riferisce. Ad esempio, un metodo con l'attributo DllImport viene dichiarato nel modo seguente:

[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static void SampleMethod();

Per ulteriori informazioni, vedere Classe DllImportAttribute.

Molti attributi includono parametri, che possono essere posizionali, senza nome o denominati. I parametri posizionali devono essere specificati in un determinato ordine e non possono essere omessi. I parametri denominati sono invece facoltativi e possono essere specificati in qualsiasi ordine. I parametri posizionali vengono specificati per primi. I seguenti tre attributi, ad esempio, sono equivalenti:

[DllImport("user32.dll")]
[DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]

Il primo parametro, ovvero il nome della DLL, è posizionale ed è sempre specificato per primo, mentre gli altri sono denominati. In questo caso, entrambi i parametri denominati sono impostati automaticamente su false e possono quindi essere omessi. Per informazioni sui valori predefiniti dei parametri, fare riferimento alla documentazione del singolo attributo.

È possibile inserire più attributi in una dichiarazione, sia separatamente che all'interno della stessa coppia di parentesi:

void MethodA([In][Out] ref double x) { }
void MethodB([Out][In] ref double x) { }
void MethodC([In, Out] ref double x) { }

Alcuni attributi possono essere specificati più volte per una stessa entità. Un esempio di attributo di questo tipo, definito multiuso, è Conditional:

[Conditional("DEBUG"), Conditional("TEST1")]
void TraceMethod()
{
    // ...
}
Nota:

Per convenzione tutti i nomi di attributo terminano con la parola "Attribute", in modo che sia possibile distinguerli da altri elementi di .NET Framework. Tuttavia, quando gli attributi vengono utilizzati nel codice non è necessario specificare il suffisso Attribute. Ad esempio, [DllImport] è equivalente a [DllImportAttribute], mentre DllImportAttribute è il nome effettivo dell'attributo in .NET Framework.

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Reflection (Guida per programmatori C#)

Attributi (Guida per programmatori C#)

Risolvere le ambiguità sulle destinazioni degli attributi (Guida per programmatori C#)

Creazione di attributi personalizzati (Guida per programmatori C#)

Accesso agli attributi mediante reflection (Guida per programmatori C#)

Attribute

System.Reflection