Panoramica degli attributi (Visual Basic)
Gli attributi offrono un metodo efficace per l'associazione di metadati o informazioni dichiarative con il codice (assembly, tipi, metodi, proprietà e così via). Dopo aver associato un attributo a un'entità di programma, in fase di esecuzione è possibile eseguire una query su tale attributo usando una tecnica denominata reflection. Per altre informazioni, vedere Reflection (Visual Basic).
Di seguito sono riportate le proprietà degli attributi:
Gli attributi aggiungono metadati al programma. I metadati sono informazioni relative ai tipi definiti in un programma. Tutti gli assembly .NET contengono un set specificato di metadati che descrive i tipi e membri dei tipi definiti nell'assembly. È possibile aggiungere attributi personalizzati per specificare altre informazioni eventualmente 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 di minori dimensioni, 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 oppure i metadati di un altro programma tramite reflection. Per altre informazioni, vedere Accesso agli attributi tramite reflection (Visual Basic).
Uso degli attributi
È possibile usare attributi nella maggior parte delle dichiarazioni, anche se la validità di un attributo specifico può essere limitata ad alcuni tipi di dichiarazione. In Visual Basic, un attributo è racchiuso tra parentesi angolari (<>). e deve apparire immediatamente prima dell'elemento a cui viene applicato, sulla stessa riga.
Nell'esempio seguente 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 è dichiarato come segue:
Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub
In una dichiarazione è possibile inserire più attributi:
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 stessa entità. Un esempio di attributo multiuso è ConditionalAttribute:
<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub
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 usati nel codice, non è necessario specificare il suffisso Attribute. Ad esempio, [DllImport]
è equivalente a [DllImportAttribute]
, mentre DllImportAttribute
è il nome effettivo dell'attributo in .NET Framework.
Parametri degli attributi
Diversi attributi dispongono di 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 tre attributi seguenti, 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. Gli altri parametri 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 di ciascun attributo.
Destinazioni degli attributi
La destinazione di un attributo è l'entità a cui tale attributo viene applicato. Un attributo, ad esempio, può essere applicato a una classe, a un metodo particolare o a un intero assembly. Per impostazione predefinita, un attributo viene applicato all'elemento che lo segue. È tuttavia possibile identificare in modo esplicito, ad esempio, se un attributo viene applicato a un metodo, al relativo parametro o al relativo valore restituito.
Per identificare in modo esplicito la destinazione di un attributo, usare la sintassi seguente:
<target : attribute-list>
Nella tabella seguente sono elencati i possibili valori di target
.
Valore di destinazione | Si applica a |
---|---|
assembly |
Intero assembly |
module |
Modulo dell'assembly corrente (diverso da un modulo di Visual Basic) |
Nell'esempio seguente viene illustrato come applicare attributi ad assembly e moduli. Per altre informazioni, vedere Attributi comuni (Visual Basic).
Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>
Usi comuni degli attributi
Di seguito vengono elencati alcuni degli usi comuni degli attributi nel codice:
Contrassegno dei metodi mediante l'attributo
WebMethod
nei servizi Web per indicare che è possibile chiamare il metodo tramite il protocollo SOAP. Per altre informazioni, vedere WebMethodAttribute.Descrizione della procedura di marshalling dei parametri del metodo durante l'interazione con il codice nativo. Per altre informazioni, vedere MarshalAsAttribute.
Descrizione delle proprietà COM per classi, metodi e interfacce.
Chiamata al codice non gestito che usa la classe DllImportAttribute.
Descrizione dell'assembly con indicazione di titolo, versione, descrizione o marchio.
Descrizione dei membri della classe da serializzare per la persistenza.
Descrizione della procedura di mapping tra membri di una classe e nodi XML per la serializzazione XML.
Descrizione dei requisiti di sicurezza per i metodi.
Definizione delle caratteristiche usate per garantire la sicurezza.
Controllo delle ottimizzazioni tramite il compilatore JIT (Just-In-Time), in modo da garantire un semplice debug del codice.
Recupero di informazioni relative al chiamante di un metodo.
Sezioni correlate
Per altre informazioni, vedere: