Vanliga attribut (Visual Basic)

Det här avsnittet beskriver de attribut som oftast används i Visual Basic-program.

Globala attribut

De flesta attribut tillämpas på specifika språkelement, till exempel klasser eller metoder. Vissa attribut är dock globala – de gäller för en hel sammansättning eller modul. Attributet kan till exempel AssemblyVersionAttribute användas för att bädda in versionsinformation i en sammansättning, så här:

<Assembly: AssemblyVersion("1.0.0.0")>

Globala attribut visas i källkoden efter alla toppnivåinstruktioner Imports och före alla typ-, modul- eller namnområdesdeklarationer. Globala attribut kan visas i flera källfiler, men filerna måste kompileras i ett enda kompileringspass. För Visual Basic-projekt placeras globala attribut vanligtvis i filen AssemblyInfo.vb (filen skapas automatiskt när du skapar ett projekt i Visual Studio).

Sammansättningsattribut är värden som ger information om en sammansättning. De är indelade i följande kategorier:

  • Sammansättningsidentitetsattribut

  • Informationsattribut

  • Attribut för sammansättningsmanifest

Attribut för sammansättningsidentitet

Tre attribut (med ett starkt namn, om tillämpligt) avgör identiteten för en sammansättning: namn, version och kultur. Dessa attribut utgör det fullständiga namnet på sammansättningen och krävs när du refererar till den i kod. Du kan ange en sammansättnings version och kultur med hjälp av attribut. Namnvärdet anges dock av kompilatorn, Visual Studio IDE i dialogrutan Sammansättningsinformation eller Assembly Linker (Al.exe) när sammansättningen skapas, baserat på filen som innehåller sammansättningsmanifestet. Attributet AssemblyFlagsAttribute anger om flera kopior av sammansättningen kan samexistera.

I följande tabell visas identitetsattributen.

Attribut Syfte
AssemblyName Beskriver helt en sammansättnings identitet.
AssemblyVersionAttribute Anger versionen av en sammansättning.
AssemblyCultureAttribute Anger vilken kultur sammansättningen stöder.
AssemblyFlagsAttribute Anger om en sammansättning stöder körning sida vid sida på samma dator, i samma process eller i samma programdomän.

Informationsattribut

Du kan använda informationsattribut för att tillhandahålla ytterligare företagsinformation eller produktinformation för en sammansättning. I följande tabell visas de informationsattribut som definierats i System.Reflection namnområdet.

Attribut Syfte
AssemblyProductAttribute Definierar ett anpassat attribut som anger ett produktnamn för ett sammansättningsmanifest.
AssemblyTrademarkAttribute Definierar ett anpassat attribut som anger ett varumärke för ett sammansättningsmanifest.
AssemblyInformationalVersionAttribute Definierar ett anpassat attribut som anger en informationsversion för ett sammansättningsmanifest.
AssemblyCompanyAttribute Definierar ett anpassat attribut som anger ett företagsnamn för ett sammansättningsmanifest.
AssemblyCopyrightAttribute Definierar ett anpassat attribut som anger en upphovsrätt för ett sammansättningsmanifest.
AssemblyFileVersionAttribute Instruerar kompilatorn att använda ett specifikt versionsnummer för Win32-filversionsresursen.
CLSCompliantAttribute Anger om sammansättningen är kompatibel med COMMON Language Specification (CLS).

Attribut för sammansättningsmanifest

Du kan använda attribut för sammansättningsmanifestet för att ange information i sammansättningsmanifestet. Detta omfattar rubrik, beskrivning, standardalias och konfiguration. I följande tabell visas de sammansättningsmanifestattribut som definierats i System.Reflection namnområdet.

Attribut Syfte
AssemblyTitleAttribute Definierar ett anpassat attribut som anger en sammansättningstitel för ett sammansättningsmanifest.
AssemblyDescriptionAttribute Definierar ett anpassat attribut som anger en sammansättningsbeskrivning för ett sammansättningsmanifest.
AssemblyConfigurationAttribute Definierar ett anpassat attribut som anger en sammansättningskonfiguration (till exempel detaljhandel eller felsökning) för ett sammansättningsmanifest.
AssemblyDefaultAliasAttribute Definierar ett eget standardalias för ett sammansättningsmanifest

Föråldrat attribut

Attributet Obsolete markerar en programentitet som en som inte längre rekommenderas för användning. Varje användning av en entitet som har markerats som föråldrad genererar därefter en varning eller ett fel, beroende på hur attributet har konfigurerats. Till exempel:

<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

I det här exemplet Obsolete används attributet för klassen A och metoden B.OldMethod. Eftersom det andra argumentet för attributkonstruktorn som tillämpas på B.OldMethod är inställt på true, kommer den här metoden att orsaka ett kompilatorfel, medan användning av klassen A bara ger en varning. Att anropa B.NewMethodgenererar dock ingen varning eller ett fel.

Strängen som anges som det första argumentet för attributkonstruktorn visas som en del av varningen eller felet. När du till exempel använder den med tidigare definitioner genererar följande kod två varningar och ett fel:

' 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()

Två varningar för klassen A genereras: en för deklarationen av klassreferensen och en för klasskonstruktorn.

Attributet Obsolete kan användas utan argument, men en förklaring av varför objektet är föråldrat och vad som ska användas i stället rekommenderas.

Attributet Obsolete är ett engångsattribut och kan tillämpas på alla entiteter som tillåter attribut. Obsolete är ett alias för ObsoleteAttribute.

Villkorsattribut

Attributet Conditional gör körningen av en metod beroende av en förbearbetningsidentifierare. Attributet Conditional är ett alias för ConditionalAttributeoch kan tillämpas på en metod eller en attributklass.

I det här exemplet Conditional tillämpas på en metod för att aktivera eller inaktivera visning av programspecifik diagnostikinformation:

#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

Om identifieraren TRACE_ON inte har definierats visas inga spårningsutdata.

Attributet Conditional används ofta med identifieraren DEBUG för att aktivera spårnings- och loggningsfunktioner för felsökningsversioner men inte i versionsversioner, så här:

<Conditional("DEBUG")>
Shared Sub DebugMethod()

End Sub

När en metod markerad som villkorsstyrd anropas avgör förekomsten eller frånvaron av den angivna förbearbetningssymbolen om anropet inkluderas eller utelämnas. Om symbolen har definierats inkluderas anropet. annars utelämnas anropet. Att använda Conditional är ett renare, mer elegant och mindre felbenäget alternativ till att omsluta metoder inuti #if…#endif block, så här:

#If DEBUG Then
    Sub ConditionalMethod()
    End Sub
#End If

En villkorsstyrd metod måste vara en metod i en klass- eller structdeklaration och får inte ha något returvärde.

Använda flera identifierare

Om en metod har flera Conditional attribut inkluderas ett anrop till metoden om minst en av de villkorsstyrda symbolerna definieras (med andra ord länkas symbolerna logiskt ihop med operatorn OR). I det här exemplet resulterar förekomsten av antingen A eller B i ett metodanrop:

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

End Sub

För att uppnå effekten av logiskt länkande symboler med hjälp av OPERATORN AND kan du definiera villkorsstyrda seriemetoder. Till exempel körs den andra metoden nedan endast om båda A och B definieras:

<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

Använda villkorsstyrd med attributklasser

Attributet Conditional kan också tillämpas på en attributklassdefinition. I det här exemplet lägger det anpassade attributet Documentation bara till information i metadata om FELSÖKNING har definierats.

<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

Informationsattribut för uppringare

Med hjälp av attribut för samtalsinformation kan du hämta information om anroparen till en metod. Du kan hämta filsökvägen för källkoden, radnumret i källkoden och namnet på anroparen.

Om du vill hämta information om medlemssamtal använder du attribut som tillämpas på valfria parametrar. Varje valfri parameter anger ett standardvärde. I följande tabell visas de anroparinformationsattribut som definieras i System.Runtime.CompilerServices namnområdet:

Attribut beskrivning Typ
CallerFilePathAttribute Fullständig sökväg till källfilen som innehåller anroparen. Det här är sökvägen vid kompileringstillfället. String
CallerLineNumberAttribute Radnummer i källfilen som metoden anropas från. Integer
CallerMemberNameAttribute Anroparens metodnamn eller egenskapsnamn. Mer information finns i Information om uppringare (Visual Basic). String
CallerArgumentExpressionAttribute Uttryck som används av anroparen för ett argument. Mer information finns i Information om uppringare (Visual Basic). String

Mer information om attributen för uppringarens information finns i Information om uppringare (Visual Basic).

Visual Basic-attribut

I följande tabell visas de attribut som är specifika för Visual Basic.

Attribut Syfte
ComClassAttribute Anger för kompilatorn att klassen ska exponeras som ett COM-objekt.
HideModuleNameAttribute Gör att modulmedlemmar endast kan kommas åt med hjälp av den kvalificering som krävs för modulen.
VBFixedStringAttribute Anger storleken på en sträng med fast längd i en struktur som ska användas med filindata- och utdatafunktioner.
VBFixedArrayAttribute Anger storleken på en fast matris i en struktur som ska användas med filindata- och utdatafunktioner.

COMClassAttribute

Använd COMClassAttribute för att förenkla processen med att skapa COM-komponenter från Visual Basic. COM-objekt skiljer sig avsevärt från .NET Framework-sammansättningar, och utan COMClassAttributemåste du följa ett antal steg för att generera ett COM-objekt från Visual Basic. För klasser som har markerats med COMClassAttributeutför kompilatorn många av dessa steg automatiskt.

HideModuleNameAttribute

Använd HideModuleNameAttribute för att tillåta att modulmedlemmar endast kan kommas åt med hjälp av den kvalificering som krävs för modulen.

VBFixedStringAttribute

Använd VBFixedStringAttribute för att tvinga Visual Basic att skapa en sträng med fast längd. Strängar är av variabel längd som standard, och det här attributet är användbart när du lagrar strängar till filer. Följande kod visar detta:

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

Använd VBFixedArrayAttribute för att deklarera matriser som är fasta i storlek. Precis som Visual Basic-strängar är matriser av variabel längd som standard. Det här attributet är användbart när du serialiserar eller skriver data till filer.

Se även