Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Determina il modo in cui è possibile utilizzare una classe Attribute personalizzata. L'attributo AttributeUsage può essere applicato alle definizioni di attributo personalizzate per specificare il modo in cui può essere utilizzato il nuovo attributo. Le seguenti impostazioni predefinite vengono applicate esplicitamente:
[System.AttributeUsage(System.AttributeTargets.All,
AllowMultiple=false,
Inherited=true)]
class NewAttribute : System.Attribute { }
In questo esempio la classe NewAttribute può essere applicata a una qualsiasi entità del codice che supporta gli attributi, ma può essere applicata una sola volta a ciascuna entità. Se applicata a una classe base, viene ereditata dalle classi derivate.
Gli argomenti AllowMultiple e Inherited sono facoltativi. Di conseguenza, il codice riportato di seguito otterrà lo stesso effetto:
[System.AttributeUsage(System.AttributeTargets.All)]
class NewAttribute : System.Attribute { }
Il primo argomento AttributeUsage deve corrispondere a uno o più elementi dell'enumerazione AttributeTargets. È possibile utilizzare l'operatore OR per specificare più tipi di destinazione, come nell'esempio riportato di seguito:
using System;
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
class NewPropertyOrFieldAttribute : Attribute { }
Se l'argomento AllowMultiple è impostato su true, l'attributo risultante può essere applicato più volte a una singola entità, come nell'esempio riportato di seguito:
using System;
[AttributeUsage(AttributeTargets.Class, AllowMultiple=true)]
class MultiUseAttr : Attribute { }
[MultiUseAttr][MultiUseAttr]
class Class1 { }
[MultiUseAttr, MultiUseAttr]
class Class2 { }
In questo caso, MultiUseAttr può essere applicato ripetutamente poiché AllowMultiple è impostato su true. Entrambi i formati indicati per l'applicazione di più attributi sono validi.
Se Inherited è impostato su false, l'attributo non viene ereditato dalle classi derivate da una classe a cui sono applicati attributi. Ad esempio:
using System;
[AttributeUsage(AttributeTargets.Class, Inherited=false)]
class Attr1 : Attribute { }
[Attr1]
class BClass { }
class DClass : BClass { }
In questo caso, Attr1 non viene applicato a DClass tramite ereditarietà.
Note
AttributeUsage è un attributo di utilizzo singolo, ovvero non può essere applicato più di una volta alla stessa classe. AttributeUsage è un alias per AttributeUsageAttribute.
Per ulteriori informazioni, vedere la classe Accesso agli attributi mediante reflection (Guida per programmatori C#).
Esempio
Nell'esempio di codice riportato di seguito vengono illustrati gli effetti degli argomenti Inherited e AllowMultiple sull'attributo AttributeUsage e viene spiegato come è possibile enumerare gli attributi personalizzati applicati a una classe.
using System;
// Create some custom attributes:
[AttributeUsage(System.AttributeTargets.Class, Inherited=false)]
class A1 : System.Attribute { }
[AttributeUsage(System.AttributeTargets.Class)]
class A2 : System.Attribute { }
[AttributeUsage(System.AttributeTargets.Class, AllowMultiple=true)]
class A3 : System.Attribute { }
// Apply custom attributes to classes:
[A1,A2]
class BaseClass { }
[A3,A3]
class DerivedClass : BaseClass { }
public class TestAttributeUsage
{
static void Main()
{
BaseClass b = new BaseClass();
DerivedClass d = new DerivedClass();
// Display custom attributes for each class.
Console.WriteLine("Attributes on Base Class:");
object[] attrs = b.GetType().GetCustomAttributes(true);
foreach (Attribute attr in attrs)
{
Console.WriteLine(attr);
}
Console.WriteLine("Attributes on Derived Class:");
attrs = d.GetType().GetCustomAttributes(true);
foreach (Attribute attr in attrs)
{
Console.WriteLine(attr);
}
}
}
Esempio di output
Attributes on Base Class:
A1
A2
Attributes on Derived Class:
A3
A3
A2
Vedere anche
Concetti
Riferimenti
Reflection (Guida per programmatori C#)
Attributi (Guida per programmatori C#)
Utilizzo di 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#)