Condividi tramite


Applicazione di attributi

Aggiornamento: novembre 2007

Gli attributi vengono applicati tramite l'aggiunta di blocchi di attributi agli elementi di programma, quali proprietà, metodi, eventi, classi e assembly. Un blocco di attributi è costituito da parentesi acute ("< >") che racchiudono un elenco di dichiarazioni di attributi separate da virgole. La dichiarazione di attributo è costituita da un modificatore di attributo facoltativo, ad esempio Module o Assembly, un nome di attributo, un elenco di parametri di posizione obbligatori (che potrebbe essere in overload) e un elenco di argomenti denominati facoltativi. Gli attributi con modificatori devono essere posizionati in una sezione di attributi all'inizio di un file di origine. Nell'esempio che segue vengono impostati un attributo assembly, che definisce un titolo per l'assembly, e un attributo module, che indica che il modulo è conforme a Common Language Specification (CLS).

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"), _
Module: CLSCompliant(True)> 

È possibile applicare gli attributi assembly anche tramite il file AssemblyInfo.vb, che viene aggiunto automaticamente ai progetti dall'interfaccia utente di Visual Studio. e contiene attributi a livello di assembly con valori predefiniti o vuoti.

Gli attributi applicati agli elementi di programma, ad esempio a proprietà, precedono l'elemento di programma a cui vengono applicati. Utilizzando il codice seguente, ad esempio, è possibile applicare un attributo a una definizione di classe:

<CustomAttr(Update:=True)> Class Class1

Per convenzione tutti i nomi di attributo terminano con la parola "Attribute", in modo che sia possibile distinguerli dagli altri elementi di .NET Framework. Quando si utilizzano gli attributi, tuttavia, non è necessario specificare il suffisso Attribute. Se ad esempio si utilizza un attributo denominato CustomAttrAttribute, specificare <CustomAttr(Update:=True)> equivale a specificare <CustomAttrAttribute(Update:=True)>.

Argomenti di attributi

Gli argomenti facoltativi, obbligatori, di posizione e denominati vengono utilizzati dagli attributi nello stesso modo in cui sono utilizzati dagli oggetti. Gli argomenti di posizione sono argomenti che vengono specificati nell'ordine in cui vengono dichiarati per il costruttore di un attributo. Utilizzando il codice seguente, ad esempio, è possibile chiamare il costruttore Sub New di un attributo con due valori:

<CustomAttr(True, False)> Class Class1

Gli argomenti passati a Sub New nelle classi di attributi vengono in genere utilizzati per inizializzare i valori di campi e proprietà.

È possibile utilizzare gli argomenti denominati per impostare direttamente il valore di proprietà e campi. Per specificare un argomento denominato è necessario aggiungere ":=" al nome di un argomento, seguito dal valore che si desidera specificare. A differenza di quanto avviene con gli argomenti di posizione, è possibile specificare gli argomenti denominati in qualunque ordine. Utilizzando il codice riportato di seguito, ad esempio, è possibile impostare il valore True per il campo Update e il valore False per il campo Keep:

<CustomAttr(Update:=True, Keep:=False)> Class Class1
Nota:

Esiste un'importante differenza tra gli argomenti di attributi e gli argomenti utilizzati con chiamate al metodo standard. È necessario utilizzare argomenti posizionali per argomenti utilizzati con il costruttore Sub New di classi Attribute. Gli argomenti denominati possono essere utilizzati solo per impostare i valori di campi e proprietà di classi Attribute.

Gli argomenti obbligatori sono argomenti che devono essere specificati sempre. Gli argomenti facoltativi sono argomenti che è possibile ignorare utilizzando una virgola come segnaposto quando si utilizzano argomenti posizionali o semplicemente omettere quando si utilizzano gli argomenti denominati.

Gli argomenti di attributi devono essere espressioni costanti.

Esempi di attributi

Di seguito sono forniti alcuni esempi di dichiarazioni di attributi.

Per utilizzare l'attributo MarshalAs per controllare la modalità di marshalling dei parametri

  1. Aggiungere un'istruzione Imports per lo spazio dei nomi System.Runtime.InteropServices all'inizio del codice sorgente:

    Imports System.Runtime.InteropServices
    
  2. Aggiungere l'attributo MarshalAsAttribute ai parametri come prefisso e specificare il tipo di dati richiesto dalla destinazione. Utilizzando il seguente codice, ad esempio, è possibile effettuare il marshalling di due parametri come puntatore long del tipo di dati a una stringa (LPStr) per una funzione dell'API di Windows:

    Declare Auto Sub CopyFile Lib "Kernel32.Lib" ( _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal existingfile As String, _
       <MarshalAs(UnmanagedType.LPWStr)> ByVal newfile As String, _
       ByVal failifexists As Boolean _
    )
    

L'attributo MarshalAsAttribute è utilizzato da Common Language Runtime per determinare la modalità di marshalling di un parametro tra il codice gestito di Visual Basic e il codice non gestito di una chiamata all'API di Windows.

Per esporre un metodo a client Web remoti

  1. Scegliere Progetto dal menu File, selezionare il modello Servizio Web ASP.NET e aggiungere un'istruzione Imports per lo spazio dei nomi System.Web:

    Imports System.Web.Services
    
  2. Definire un metodo e utilizzare l'attributo WebMethodAttribute per consentire ai client Web remoti di chiamare il metodo:

    <WebMethod()> Public Function HelloWorld() As String
        HelloWorld = "Hello World..."
    End Function
    

Rendere Public un metodo di un servizio Web XML non è sufficiente per esporre tale metodo ai client Web. Per consentire a un client Web remoto di chiamare un metodo, è necessario applicare in modo esplicito a tale metodo l'attributo WebMethodAttribute.

Vedere anche

Attività

Procedura: definire attributi personalizzati

Concetti

Cenni preliminari sugli attributi in Visual Basic

Utilizzi comuni degli attributi

Passaggio di argomenti tramite posizione e tramite nome

Riferimenti

WebMethodAttribute

Istruzione Imports (tipo e spazio dei nomi .NET)

MarshalAsAttribute

System.Web

Altre risorse

Attributi personalizzati in Visual Basic