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.
Gli attributi forniscono un metodo efficace per associare metadati o informazioni dichiarative, con codice (assembly, tipi, metodi, proprietà e così via). Dopo che un attributo è associato a un'entità programma, l'attributo può essere sottoposto a query in fase di esecuzione usando una tecnica denominata reflection . Per altre informazioni, vedere Reflection (Visual Basic).
Gli attributi hanno le proprietà seguenti:
Gli attributi aggiungono metadati al programma. metadati sono informazioni sui tipi definiti in un programma. Tutti gli assembly .NET contengono un set specificato di metadati che descrivono i tipi e i membri di tipo definiti nell'assembly. È possibile aggiungere attributi personalizzati per specificare eventuali informazioni aggiuntive necessarie. Per altre informazioni, vedere Creazione di attributi personalizzati (Visual Basic).
È possibile applicare uno o più attributi a interi assembly, moduli o elementi di programma più piccoli, ad esempio classi e proprietà.
Gli attributi possono accettare argomenti nello stesso modo dei metodi e delle proprietà.
Il programma può esaminare i propri metadati o i metadati in altri programmi usando reflection. Per ulteriori informazioni, vedere Accesso agli attributi tramite reflection (Visual Basic).
Uso degli attributi
Gli attributi possono essere inseriti nella maggior parte delle dichiarazioni, anche se un attributo specifico potrebbe limitare i tipi di dichiarazioni su cui è valido. In Visual Basic un attributo è racchiuso tra parentesi angolari (<>). Deve essere visualizzato immediatamente prima dell'elemento a cui viene applicato, sulla stessa riga.
In questo esempio, l'attributo SerializableAttribute viene usato per applicare una caratteristica specifica a una classe:
<System.Serializable()> Public Class SampleClass
' Objects of this type can be serialized.
End Class
Un metodo con l'attributo DllImportAttribute viene dichiarato come segue:
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
È possibile inserire più attributi in una dichiarazione:
Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub
Alcuni attributi possono essere specificati più volte per una determinata entità. Un esempio di attributo multiuso di questo tipo è ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
Annotazioni
Per convenzione, tutti i nomi degli attributi terminano con la parola "Attribute" per distinguerli da altri elementi in .NET Framework. Tuttavia, non è necessario specificare il suffisso dell'attributo quando si usano attributi nel codice. Ad esempio, [DllImport] è equivalente a [DllImportAttribute], ma DllImportAttribute è il nome effettivo dell'attributo in .NET Framework.
Parametri dell'attributo
Molti attributi hanno parametri, che possono essere posizionali, senza nome o denominati. Tutti i parametri posizionali devono essere specificati in un determinato ordine e non possono essere omessi; I parametri denominati sono facoltativi e possono essere specificati in qualsiasi ordine. I parametri posizionali vengono specificati per primi. Ad esempio, questi tre attributi sono equivalenti:
<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>
Il primo parametro, il nome della DLL, è posizionale e viene sempre prima; gli altri sono denominati. In questo caso, entrambi i parametri denominati hanno valore predefinito su false, in modo che possano essere omessi. Per informazioni sui valori dei parametri predefiniti, vedere la documentazione dell'attributo singolo.
Destinazioni degli attributi
La destinazione di un attributo è l'entità a cui si applica l'attributo. Ad esempio, un attributo può essere applicato a una classe, a un metodo specifico o a un intero assembly. Per impostazione predefinita, un attributo si applica all'elemento che precede. Tuttavia, è anche possibile identificare in modo esplicito, ad esempio, se un attributo viene applicato a un metodo o al relativo parametro o al relativo valore restituito.
Per identificare in modo esplicito una destinazione dell'attributo, usare la sintassi seguente:
<target : attribute-list>
L'elenco dei possibili valori target è illustrato nella tabella seguente.
| Valore di destinazione | Si applica a: |
|---|---|
assembly |
Intero assemblaggio |
module |
Modulo assembly corrente (diverso da un modulo di Visual Basic) |
Nell'esempio seguente viene illustrato come applicare attributi agli assembly e ai moduli. Per altre informazioni, vedere Attributi comuni (Visual Basic).
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
Usi comuni per gli attributi
L'elenco seguente include alcuni degli usi comuni degli attributi nel codice:
Contrassegnare i metodi usando l'attributo
WebMethodnei servizi Web per indicare che il metodo deve essere chiamabile tramite il protocollo SOAP. Per altre informazioni, vedere WebMethodAttribute.Descrizione di come gestire il marshalling dei parametri di un metodo nell'interoperabilità con codice nativo. Per altre informazioni, vedere MarshalAsAttribute.
Descrizione delle proprietà COM per classi, metodi e interfacce.
Chiamata di codice non gestito tramite la classe DllImportAttribute.
Descrizione dell'assembly in termini di titolo, versione, descrizione o marchio.
Descrizione dei membri di una classe da serializzare per la persistenza.
Descrizione di come eseguire il mapping tra i membri della classe e i nodi XML per la serializzazione XML.
Descrizione dei requisiti di sicurezza per i metodi.
Specifica delle caratteristiche utilizzate per applicare la sicurezza.
Controllare le ottimizzazioni dal compilatore JIT (Just-In-Time) in modo che il codice rimanga facile da eseguire.
Recupero di informazioni sul chiamante di un metodo.
Sezioni correlate
Per altre informazioni, vedere: