Attributi comuni (Visual Basic)
Questo argomento descrive gli attributi usati più di frequente nei programmi Visual Basic.
Attributi globali
La maggior parte degli attributi viene applicata a elementi specifici del linguaggio quali classi o metodi. Alcuni attributi sono invece globali e vengono applicati a un intero assembly o a un intero modulo. Ad esempio, l'attributo AssemblyVersionAttribute può essere usato per incorporare informazioni sulla versione in un assembly, nel modo seguente:
<Assembly: AssemblyVersion("1.0.0.0")>
Gli attributi globali sono visibili nel codice sorgente dopo eventuali istruzioni Imports
di primo livello e prima delle dichiarazioni di tipo, modulo o spazio dei nomi. Gli attributi globali possono apparire in più file di origine, ma i file devono essere compilati in un'unica operazione di compilazione. Per i progetti Visual Basic, gli attributi globali vengono in genere inseriti nel file AssemblyInfo.vb (il file è creato automaticamente alla creazione di un progetto in Visual Studio).
Gli attributi dell'assembly sono valori che forniscono informazioni relative a un assembly. Sono suddivisi nelle seguenti categorie:
Attributi relativi all'identità dell'assembly
Attributi informativi
Attributi relativi al manifesto dell'assembly
Attributi relativi all'identità dell'assembly
Tre attributi (con un nome sicuro, se disponibile), consentono di determinare l'identità di un assembly: il nome, la versione e le impostazioni cultura. Questi attributi formano il nome completo dell'assembly e sono necessari per creare riferimenti all'assembly nel codice. È possibile usare gli attributi per impostare la versione e le impostazioni cultura di un assembly. Tuttavia il valore del nome viene impostato alla creazione dell'assembly dal compilatore (l'IDE di Visual Studio nella finestra di dialogo informazioni Assembly oppure Assembly Linker, Al.exe), in base al file che contiene il manifesto dell'assembly. L'attributo AssemblyFlagsAttribute specifica se è supportata la coesistenza di più copie dell'assembly.
La tabella seguente visualizza gli attributi relativi all'identità.
Attributo | Scopo |
---|---|
AssemblyName | Descrive in modo completo l'identità di un assembly. |
AssemblyVersionAttribute | Specifica la versione di un assembly. |
AssemblyCultureAttribute | Specifica le impostazioni cultura supportate dall'assembly. |
AssemblyFlagsAttribute | Specifica se un assembly supporta l'esecuzione side-by-side nello stesso computer, nello stesso processo o nello stesso dominio dell'applicazione. |
Attributi informativi
Gli attributi informativi consentono di fornire informazioni aggiuntive relative alla società o al prodotto per un assembly. La tabella seguente mostra gli attributi informativi definiti nello spazio dei nomi System.Reflection.
Attributo | Scopo |
---|---|
AssemblyProductAttribute | Definisce un attributo personalizzato che specifica un nome prodotto per un manifesto dell'assembly. |
AssemblyTrademarkAttribute | Definisce un attributo personalizzato che specifica un marchio registrato per un manifesto dell'assembly. |
AssemblyInformationalVersionAttribute | Definisce un attributo personalizzato che specifica una versione informativa per un manifesto dell'assembly. |
AssemblyCompanyAttribute | Definisce un attributo personalizzato che specifica un nome società per un manifesto dell'assembly. |
AssemblyCopyrightAttribute | Definisce un attributo personalizzato che specifica un copyright per un manifesto dell'assembly. |
AssemblyFileVersionAttribute | Indica al compilatore di usare un numero di versione specifico per la risorsa della versione del file Win32. |
CLSCompliantAttribute | Indica se l'assembly è conforme a CLS (Common Language Specification). |
Attributi relativi al manifesto dell'assembly
È possibile usare gli attributi relativi al manifesto dell'assembly per includere informazioni nel manifesto dell'assembly. Queste informazioni includono il titolo, la descrizione, l'alias predefinito e la configurazione. La tabella seguente visualizza gli attributi del manifesto dell'assembly definiti nello spazio dei nomi System.Reflection.
Attributo | Scopo |
---|---|
AssemblyTitleAttribute | Definisce un attributo personalizzato che specifica un titolo assembly per un manifesto dell'assembly. |
AssemblyDescriptionAttribute | Definisce un attributo personalizzato che specifica una descrizione assembly per un manifesto dell'assembly. |
AssemblyConfigurationAttribute | Definisce un attributo personalizzato che specifica una configurazione assembly per un manifesto dell'assembly. |
AssemblyDefaultAliasAttribute | Definisce un alias predefinito descrittivo per un manifesto dell'assembly. |
Attributo Obsolete
L'attributo Obsolete
contrassegna un'entità del programma il cui uso non è più consigliato. Ogni uso di un'entità contrassegnata con Obsolete genererà in seguito un avviso o errore, a seconda della configurazione dell'attributo. Ad esempio:
<System.Obsolete("use class B")>
Class A
Sub Method()
End Sub
End Class
Class B
<System.Obsolete("use NewMethod", True)>
Sub OldMethod()
End Sub
Sub NewMethod()
End Sub
End Class
Nel seguente esempio l'attributo Obsolete
viene applicato alla classe A
e al metodo B.OldMethod
. Poiché il secondo argomento del costruttore dell'attributo applicato a B.OldMethod
è impostato su true
questo metodo genererà un errore del compilatore, mentre l'uso della classe A
produrrà semplicemente un avviso. Tuttavia la chiamata di B.NewMethod
non produrrà né un avviso né un errore.
La stringa specificata come primo argomento al costruttore dell'attributo viene inclusa nell'avviso o nell'errore visualizzato. Ad esempio, se viene usato con le definizioni precedenti, il codice che segue genera due avvisi e un errore:
' Generates 2 warnings:
' Dim a As New A
' Generate no errors or warnings:
Dim b As New B
b.NewMethod()
' Generates an error, terminating compilation:
' b.OldMethod()
Vengono generati due avvisi per la classe A
: uno per la dichiarazione del riferimento alla classe e uno per il costruttore della classe.
L'attributo Obsolete
può essere usato senza argomenti, ma è consigliabile includere la spiegazione del motivo per cui l'elemento è obsoleto e l'indicazione degli elementi di codice da usare come alternativa.
Obsolete
è un attributo monouso e può essere applicato a qualsiasi entità che supporta gli attributi. Obsolete
è un alias per ObsoleteAttribute.
Attributo Conditional
L'attributo Conditional
rende l'esecuzione di un metodo dipendente da un identificatore di pre-elaborazione. L'attributo Conditional
è un alias per ConditionalAttribute e può essere applicato a un metodo o a una classe Attribute.
In questo esempio, Conditional
viene applicato a un metodo per attivare o disattivare la visualizzazione di informazioni di diagnostica specifiche del programma:
#Const TRACE_ON = True
Imports System.Diagnostics
Module TestConditionalAttribute
Public Class Trace
<Conditional("TRACE_ON")>
Public Shared Sub Msg(ByVal msg As String)
Console.WriteLine(msg)
End Sub
End Class
Sub Main()
Trace.Msg("Now in Main...")
Console.WriteLine("Done.")
End Sub
End Module
Se l'identificatore TRACE_ON
non è definito, non viene visualizzato nessun output di traccia.
L'attributo Conditional
viene usato spesso con l'identificatore DEBUG
per abilitare funzioni di traccia e registrazione nelle compilazioni di debug ma non nelle build di rilascio, come segue:
<Conditional("DEBUG")>
Shared Sub DebugMethod()
End Sub
Quando viene chiamato un metodo contrassegnato come condizionale, la presenza o l'assenza del simbolo di pre-elaborazione specificato determina se la chiamata viene inclusa o omessa. Se il simbolo è definito la chiamata viene inclusa, in caso contrario viene omessa. L'uso di Conditional
rappresenta un'alternativa più efficiente, elegante e meno soggetta a errori rispetto all'inclusione di metodi nei blocchi #if…#endif
come segue:
#If DEBUG Then
Sub ConditionalMethod()
End Sub
#End If
Un metodo condizionale deve essere un metodo in una dichiarazione di classe o struct e non deve avere un valore restituito.
Usare più identificatori
Se un metodo ha più attributi Conditional
, una chiamata al metodo è inclusa se è definito almeno uno dei simboli condizionali (in altre parole, se i simboli sono collegati tra loro a livello logico mediante l'operatore OR). In questo esempio la presenza di A
o B
determina una chiamata al metodo:
<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()
End Sub
Per ottenere il collegamento logico di simboli tramite l'operatore AND è possibile definire metodi condizionali seriali. Ad esempio, il secondo metodo riportato di seguito viene eseguito solo se sono definiti sia A
sia B
:
<Conditional("A")>
Shared Sub DoIfA()
DoIfAandB()
End Sub
<Conditional("B")>
Shared Sub DoIfAandB()
' Code to execute when both A and B are defined...
End Sub
Usare Conditional con le classi di attributi
L'attributo Conditional
può essere applicato anche a una definizione di classe Attribute. In questo esempio l'attributo personalizzato Documentation
aggiunge le informazioni ai metadati solo se è definito l'elemento DEBUG.
<Conditional("DEBUG")>
Public Class Documentation
Inherits System.Attribute
Private text As String
Sub New(ByVal doc_text As String)
text = doc_text
End Sub
End Class
Class SampleClass
' This attribute will only be included if DEBUG is defined.
<Documentation("This method displays an integer.")>
Shared Sub DoWork(ByVal i As Integer)
System.Console.WriteLine(i)
End Sub
End Class
Attributi informativi sul chiamante
Gli attributi di informazioni sul chiamante consentono di ottenere informazioni sul chiamante di un metodo. È possibile ottenere il percorso del file del codice sorgente, il numero di riga nel codice sorgente e il nome del chiamante.
È possibile ottenere informazioni sul chiamante usando gli attributi applicati ai parametri facoltativi. Ogni parametro facoltativo specifica un valore predefinito. Nella tabella seguente sono elencati gli attributi di informazioni sul chiamante definiti nello spazio dei nomi System.Runtime.CompilerServices:
Attributo | Descrizione | Tipo |
---|---|---|
CallerFilePathAttribute | Percorso completo del file di origine contenente il chiamante. È il percorso al momento della compilazione. | String |
CallerLineNumberAttribute | Numero di riga nel file di origine da cui viene chiamato il metodo. | Integer |
CallerMemberNameAttribute | Nome di una proprietà o di un metodo del chiamante. Per altre informazioni, vedere Informazioni sul chiamante (Visual Basic). | String |
CallerArgumentExpressionAttribute | Espressione utilizzata dal chiamante per un argomento. Per altre informazioni, vedere Informazioni sul chiamante (Visual Basic). | String |
Per altre informazioni sugli attributi di informazioni sul chiamante, vedere Informazioni sul chiamante (Visual Basic).
Attributi di Visual Basic
La tabella seguente elenca gli attributi specifici di Visual Basic.
Attributo | Scopo |
---|---|
ComClassAttribute | Indica al compilatore che la classe deve essere esposta come oggetto COM. |
HideModuleNameAttribute | Consente l'accesso ai membri del modulo usando solo la qualifica necessaria per il modulo. |
VBFixedStringAttribute | Specifica le dimensioni di una stringa a lunghezza fissa in una struttura da usare con le funzioni di input e output dei file. |
VBFixedArrayAttribute | Specifica le dimensioni di una matrice fissa in una struttura da usare con le funzioni di input e output dei file. |
COMClassAttribute
Usare COMClassAttribute
per semplificare il processo di creazione di componenti COM da Visual Basic. Gli oggetti COM sono notevolmente diversi dagli assembly .NET Framework e senza COMClassAttribute
, è necessario seguire una serie di passaggi per generare un oggetto COM da Visual Basic. Per le classi contrassegnate con COMClassAttribute
, il compilatore esegue automaticamente molti di questi passaggi.
HideModuleNameAttribute
Usare HideModuleNameAttribute
per consentire l'accesso ai membri del modulo usando solo la qualifica necessaria per il modulo.
VBFixedStringAttribute
Utilizzare VBFixedStringAttribute
per forzare Visual Basic a creare una stringa a lunghezza fissa. Le stringhe sono di lunghezza variabile per impostazione predefinita e questo attributo è utile quando si archiviano stringhe nei file. Questo concetto è illustrato nel codice riportato di seguito:
Structure Worker
' The runtime uses VBFixedString to determine
' if the field should be written out as a fixed size.
<VBFixedString(10)> Public LastName As String
<VBFixedString(7)> Public Title As String
<VBFixedString(2)> Public Rank As String
End Structure
VBFixedArrayAttribute
Usare VBFixedArrayAttribute
per dichiarare matrici di dimensioni fisse. Analogamente alle stringhe di Visual Basic, le matrici sono di lunghezza variabile per impostazione predefinita. Questo attributo è utile per la serializzazione o la scrittura di dati nei file.