Condividi tramite


Attributi comuni (Visual Basic)

In questo argomento vengono descritti gli attributi più comunemente usati nei programmi Visual Basic.

Attributi globali

La maggior parte degli attributi viene applicata a elementi del linguaggio specifici, ad esempio classi o metodi; Tuttavia, alcuni attributi sono globali, che si applicano a un intero assembly o modulo. Ad esempio, l'attributo AssemblyVersionAttribute può essere usato per incorporare le informazioni sulla versione in un assembly, come illustrato di seguito:

<Assembly: AssemblyVersion("1.0.0.0")>

Gli attributi globali vengono visualizzati nel codice sorgente dopo qualsiasi istruzione di primo livello Imports e prima di qualsiasi tipo, modulo o dichiarazione dello spazio dei nomi. Gli attributi globali possono essere visualizzati in più file di origine, ma i file devono essere compilati in un unico passaggio di compilazione. Per i progetti Visual Basic, gli attributi globali vengono in genere inseriti nel file AssemblyInfo.vb (il file viene creato automaticamente quando si crea un progetto in Visual Studio).

Gli attributi dell'assembly sono valori che forniscono informazioni su un assembly. Rientrano nelle categorie seguenti:

  • Attributi di identità dell'assembly

  • Attributi informativi

  • Attributi del manifesto di assemblaggio

Attributi di identità dell'assembly

Tre attributi (con un nome sicuro, se applicabile) determinano l'identità di un assembly: nome, versione e cultura. Questi attributi formano il nome completo dell'assembly e sono necessari quando vi si fa riferimento nel codice. È possibile impostare la versione e la cultura di un assembly usando gli attributi. Tuttavia, il valore del nome viene impostato dal compilatore, dall'IDE di Visual Studio nella finestra di dialogo delle informazioni sull'assembly o dal linker dell'assembly (Al.exe) quando l'assembly viene creato, in base al file che contiene il manifesto dell'assembly. L'attributo AssemblyFlagsAttribute specifica se più copie dell'assembly possono coesistere.

La tabella seguente illustra gli attributi di identità.

Attributo Scopo
AssemblyName Descrive completamente 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

È possibile utilizzare attributi informativi per fornire informazioni aziendali o sui prodotti aggiuntive per un assemblaggio. 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 di prodotto per un manifesto dell'assembly.
AssemblyTrademarkAttribute Definisce un attributo personalizzato che specifica un marchio per un manifesto dell'assembly.
AssemblyInformationalVersionAttribute Definisce un attributo personalizzato che specifica una versione informativa per un manifesto di assembly.
AssemblyCompanyAttribute Definisce un attributo personalizzato che specifica un nome aziendale per un manifesto dell'assemblaggio.
AssemblyCopyrightAttribute Definisce un attributo personalizzato che specifica un copyright per il manifesto di un 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 Common Language Specification (CLS).

Attributi del manifesto dell'assembly

È possibile utilizzare gli attributi del manifesto dell'assembly per fornire informazioni nel manifesto. Sono inclusi titolo, descrizione, alias predefinito e configurazione. Nella tabella seguente vengono illustrati gli attributi del manifesto dell'assembly definiti nello spazio dei System.Reflection nomi .

Attributo Scopo
AssemblyTitleAttribute Definisce un attributo personalizzato che specifica un titolo di assembly per un manifesto di assembly.
AssemblyDescriptionAttribute Definisce un attributo personalizzato che specifica una descrizione di assembly per un manifesto di assembly.
AssemblyConfigurationAttribute Definisce un attributo personalizzato che specifica una configurazione dell'assembly, ad esempio retail o debug, per un manifesto dell'assembly.
AssemblyDefaultAliasAttribute Definisce un alias predefinito intuitivo per un manifesto dell'assembly

Attributo obsoleto

L'attributo Obsolete contrassegna un'entità del programma come una che non è più consigliata per l'uso. Ogni uso di un'entità contrassegnata come obsoleta genererà successivamente un avviso o un errore, a seconda della configurazione dell'attributo. Per 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

In questo 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 genererà solo un avviso. Tuttavia la chiamata di B.NewMethod non produrrà né un avviso né un errore.

La stringa fornita come primo argomento del costruttore di attributi verrà visualizzata come parte dell'avviso o dell'errore. 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 una spiegazione del motivo per cui l'elemento è obsoleto e cosa usare.

Obsolete è un attributo monouso e può essere applicato a qualsiasi entità che supporta gli attributi. Obsolete è un alias per ObsoleteAttribute.

Attributo condizionale

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 viene Conditional applicato a un metodo per abilitare o disabilitare 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 verrà visualizzato alcun output di traccia.

L'attributo Conditional viene spesso usato con l'identificatore DEBUG per abilitare le funzionalità di traccia e registrazione per le compilazioni di debug, ma non nelle build di versione, come illustrato di seguito:

<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. Usare Conditional è un'alternativa più pulita, più elegante e meno soggetta a errori rispetto al racchiudere i metodi dentro blocchi #if…#endif, come questo:

#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.

Uso di più identificatori

Se un metodo ha più Conditional attributi, viene inclusa una chiamata al metodo se viene definito almeno uno dei simboli condizionali ( in altre parole, i simboli vengono collegati logicamente usando l'operatore OR). In questo esempio, la presenza di A o B genererà una chiamata al metodo:

<Conditional("A"), Conditional("B")>
Shared Sub DoIfAorB()

End Sub

Per ottenere l'effetto del collegamento logico dei simboli tramite l'operatore AND, è possibile definire metodi condizionali seriali. Ad esempio, il secondo metodo seguente verrà eseguito solo se A e B sono definiti:

<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

Utilizzo di condizioni con classi di attributi

L'attributo Conditional può essere applicato anche a una definizione di classe Attribute. In questo esempio, l'attributo Documentation personalizzato aggiungerà informazioni solo ai metadati se è definito 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 informazioni chiamante

Usando gli attributi Info Chiamante, è possibile 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 membro del chiamante.

Per ottenere informazioni sul chiamante membro, usare gli attributi applicati ai parametri facoltativi. Ogni parametro facoltativo specifica un valore predefinito. Nella tabella seguente sono elencati gli attributi delle informazioni chiamante definiti nello spazio dei nomi System.Runtime.CompilerServices.

Attributo Descrizione TIPO
CallerFilePathAttribute Percorso completo del file di origine che contiene il chiamante. Questo è il percorso in fase di compilazione. String
CallerLineNumberAttribute Numero di riga nel file di origine da cui viene chiamato il metodo . Integer
CallerMemberNameAttribute Nome del metodo o nome della proprietà 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 delle informazioni sul chiamante, vedere Informazioni sul chiamante (Visual Basic).For more information about the Caller Info attributes, see Caller Information (Visual Basic).

Attributi di Visual Basic

Nella tabella seguente sono elencati 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 utilizzare 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. Il codice seguente illustra quanto segue:

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 durante la serializzazione o la scrittura di dati nei file.

Vedere anche