Wspólne atrybuty (Visual Basic)

W tym temacie opisano atrybuty, które są najczęściej używane w programach Visual Basic.

Atrybuty globalne

Większość atrybutów jest stosowana do określonych elementów języka, takich jak klasy lub metody; jednak niektóre atrybuty są globalne — mają zastosowanie do całego zestawu lub modułu. Na przykład atrybut może służyć do osadzania AssemblyVersionAttribute informacji o wersji w zestawie, w następujący sposób:

<Assembly: AssemblyVersion("1.0.0.0")>

Atrybuty globalne są wyświetlane w kodzie źródłowym po dowolnej instrukcji najwyższego poziomu Imports i przed dowolnym typem, modułem lub deklaracjami przestrzeni nazw. Atrybuty globalne mogą być wyświetlane w wielu plikach źródłowych, ale pliki muszą zostać skompilowane w jednym przebiegu kompilacji. W przypadku projektów Visual Basic atrybuty globalne są zwykle umieszczane w pliku AssemblyInfo.vb (plik jest tworzony automatycznie podczas tworzenia projektu w programie Visual Studio).

Atrybuty zestawu to wartości, które zawierają informacje o zestawie. Należą one do następujących kategorii:

  • Atrybuty tożsamości zestawu

  • Atrybuty informacyjne

  • Atrybuty manifestu zestawu

Atrybuty tożsamości zestawu

Trzy atrybuty (o silnej nazwie, jeśli ma zastosowanie) określają tożsamość zestawu: nazwę, wersję i kulturę. Te atrybuty tworzą pełną nazwę zestawu i są wymagane podczas odwołowania się do niego w kodzie. Wersję i kulturę zestawu można ustawić przy użyciu atrybutów. Jednak wartość nazwy jest ustawiana przez kompilator, środowisko IDE programu Visual Studio w oknie dialogowym Informacje o zestawie lub konsolidator zestawu (Al.exe) podczas tworzenia zestawu na podstawie pliku zawierającego manifest zestawu. Atrybut AssemblyFlagsAttribute określa, czy wiele kopii zestawu może współistnieć.

W poniższej tabeli przedstawiono atrybuty tożsamości.

Atrybut Purpose
AssemblyName W pełni opisuje tożsamość zestawu.
AssemblyVersionAttribute Określa wersję zestawu.
AssemblyCultureAttribute Określa kulturę obsługiwaną przez zestaw.
AssemblyFlagsAttribute Określa, czy zestaw obsługuje wykonywanie równoległe na tym samym komputerze, w tym samym procesie, czy w tej samej domenie aplikacji.

Atrybuty informacyjne

Możesz użyć atrybutów informacyjnych, aby podać dodatkowe informacje o firmie lub produkcie dla zestawu. W poniższej System.Reflection tabeli przedstawiono atrybuty informacyjne zdefiniowane w przestrzeni nazw.

Atrybut Purpose
AssemblyProductAttribute Definiuje atrybut niestandardowy określający nazwę produktu manifestu zestawu.
AssemblyTrademarkAttribute Definiuje atrybut niestandardowy, który określa znak towarowy manifestu zestawu.
AssemblyInformationalVersionAttribute Definiuje atrybut niestandardowy określający wersję informacyjną manifestu zestawu.
AssemblyCompanyAttribute Definiuje atrybut niestandardowy, który określa nazwę firmy dla manifestu zestawu.
AssemblyCopyrightAttribute Definiuje atrybut niestandardowy określający prawa autorskie do manifestu zestawu.
AssemblyFileVersionAttribute Instruuje kompilator, aby używał określonego numeru wersji dla zasobu wersji pliku Win32.
CLSCompliantAttribute Wskazuje, czy zestaw jest zgodny ze specyfikacją języka wspólnego (CLS).

Atrybuty manifestu zestawu

Atrybuty manifestu zestawu umożliwiają podanie informacji w manifeście zestawu. Obejmuje to tytuł, opis, alias domyślny i konfigurację. W poniższej System.Reflection tabeli przedstawiono atrybuty manifestu zestawu zdefiniowane w przestrzeni nazw.

Atrybut Purpose
AssemblyTitleAttribute Definiuje atrybut niestandardowy, który określa tytuł zestawu dla manifestu zestawu.
AssemblyDescriptionAttribute Definiuje atrybut niestandardowy, który określa opis zestawu dla manifestu zestawu.
AssemblyConfigurationAttribute Definiuje atrybut niestandardowy określający konfigurację zestawu (np. sprzedaż detaliczną lub debugowanie) manifestu zestawu.
AssemblyDefaultAliasAttribute Definiuje przyjazny alias domyślny manifestu zestawu

Przestarzały atrybut

Atrybut Obsolete oznacza jednostkę programu jako jednostkę, która nie jest już zalecana do użycia. Każde użycie jednostki oznaczonej jako przestarzałe spowoduje wygenerowanie ostrzeżenia lub błędu w zależności od konfiguracji atrybutu. Na przykład:

<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

W tym przykładzie Obsolete atrybut jest stosowany do klasy A i metody B.OldMethod. Ponieważ drugi argument konstruktora atrybutu zastosowanego do B.OldMethod jest ustawiony na truewartość , ta metoda spowoduje błąd kompilatora, natomiast użycie klasy A spowoduje wyświetlenie ostrzeżenia. Wywołanie B.NewMethodmetody nie powoduje jednak ostrzeżenia ani błędu.

Ciąg podany jako pierwszy argument konstruktora atrybutu będzie wyświetlany jako część ostrzeżenia lub błędu. Jeśli na przykład używasz go z poprzednimi definicjami, następujący kod generuje dwa ostrzeżenia i jeden błąd:

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

Generowane są dwa ostrzeżenia dla klasy A : jeden dla deklaracji odwołania do klasy i jeden dla konstruktora klasy.

Atrybut Obsolete może być używany bez argumentów, ale w tym wyjaśnienie, dlaczego element jest przestarzały i co zamiast tego jest zalecane.

Atrybut Obsolete jest atrybutem pojedynczego użycia i może być stosowany do dowolnej jednostki, która zezwala na atrybuty. Obsolete to alias dla elementu ObsoleteAttribute.

Atrybut warunkowy

Atrybut Conditional sprawia, że wykonanie metody jest zależne od identyfikatora przetwarzania wstępnego. Atrybut Conditional jest aliasem dla ConditionalAttributeelementu i można go zastosować do metody lub klasy atrybutów.

W tym przykładzie Conditional jest stosowany do metody w celu włączenia lub wyłączenia wyświetlania informacji diagnostycznych specyficznych dla programu:

#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

TRACE_ON Jeśli identyfikator nie jest zdefiniowany, żadne dane wyjściowe śledzenia nie zostaną wyświetlone.

Atrybut Conditional jest często używany z identyfikatorem DEBUG w celu włączenia funkcji śledzenia i rejestrowania kompilacji debugowania, ale nie w kompilacjach wydania, w następujący sposób:

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

End Sub

Gdy wywoływana jest metoda oznaczona jako warunkowa, obecność lub brak określonego symbolu przetwarzania wstępnego określa, czy wywołanie jest dołączone, czy pominięte. Jeśli symbol jest zdefiniowany, zostanie dołączone wywołanie; w przeciwnym razie wywołanie zostanie pominięte. Użycie Conditional to czystsza, bardziej elegancka i mniej podatna na błędy alternatywa dla ujęć metod wewnątrz #if…#endif bloków, w następujący sposób:

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

Metoda warunkowa musi być metodą w deklaracji klasy lub struktury i nie może mieć wartości zwracanej.

Używanie wielu identyfikatorów

Jeśli metoda ma wiele Conditional atrybutów, wywołanie metody jest uwzględniane, jeśli zdefiniowano co najmniej jeden z symboli warunkowych (innymi słowy, symbole są logicznie połączone za pomocą operatora OR). W tym przykładzie obecność metody A lub B spowoduje wywołanie metody:

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

End Sub

Aby osiągnąć efekt logicznego łączenia symboli przy użyciu operatora AND, można zdefiniować metody warunkowe szeregowe. Na przykład druga metoda poniżej zostanie wykonana tylko wtedy, gdy zdefiniowano obie A metody i 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

Używanie warunkowego z klasami atrybutów

Atrybut Conditional można również zastosować do definicji klasy atrybutu. W tym przykładzie atrybut Documentation niestandardowy doda informacje tylko do metadanych, jeśli zdefiniowano debugowanie.

<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

Atrybuty informacji o obiekcie wywołującym

Przy użyciu atrybutów informacji o obiekcie wywołującym można uzyskać informacje o obiekcie wywołującym metodę. Możesz uzyskać ścieżkę pliku kodu źródłowego, numer wiersza w kodzie źródłowym i nazwę elementu członkowskiego obiektu wywołującego.

Aby uzyskać informacje o elementach wywołujących składowych, należy użyć atrybutów, które są stosowane do parametrów opcjonalnych. Każdy opcjonalny parametr określa wartość domyślną. W poniższej tabeli wymieniono atrybuty informacji o obiekcie wywołującym System.Runtime.CompilerServices zdefiniowane w przestrzeni nazw:

Atrybut opis Type
CallerFilePathAttribute Pełna ścieżka pliku źródłowego zawierającego obiekt wywołujący. Jest to ścieżka w czasie kompilacji. String
CallerLineNumberAttribute Numer wiersza w pliku źródłowym, z którego jest wywoływana metoda. Integer
CallerMemberNameAttribute Nazwa metody lub nazwa właściwości obiektu wywołującego. Aby uzyskać więcej informacji, zobacz Caller Information (Visual Basic). String
CallerArgumentExpressionAttribute Wyrażenie używane przez obiekt wywołujący dla argumentu. Aby uzyskać więcej informacji, zobacz Caller Information (Visual Basic). String

Aby uzyskać więcej informacji na temat atrybutów informacji o obiekcie wywołującym, zobacz Informacje o obiekcie wywołującym (Visual Basic).

Atrybuty języka Visual Basic

W poniższej tabeli wymieniono atrybuty specyficzne dla języka Visual Basic.

Atrybut Purpose
ComClassAttribute Wskazuje kompilatorowi, że klasa powinna być uwidoczniona jako obiekt COM.
HideModuleNameAttribute Umożliwia dostęp do elementów członkowskich modułu przy użyciu tylko kwalifikacji wymaganych do tego modułu.
VBFixedStringAttribute Określa rozmiar ciągu o stałej długości w strukturze do użycia z funkcjami wejściowymi i wyjściowymi plików.
VBFixedArrayAttribute Określa rozmiar stałej tablicy w strukturze do użycia z funkcjami wejściowymi i wyjściowymi plików.

Comclassattribute

Użyj COMClassAttribute polecenia , aby uprościć proces tworzenia składników COM z poziomu języka Visual Basic. Obiekty COM różnią się znacznie od zestawów .NET Framework i bez COMClassAttributeprogramu , należy wykonać kilka kroków w celu wygenerowania obiektu COM z poziomu visual basic. W przypadku klas oznaczonych za pomocą COMClassAttributepolecenia kompilator wykonuje wiele z tych kroków automatycznie.

HideModuleNameAttribute

Służy HideModuleNameAttribute do zezwalania na dostęp do elementów członkowskich modułu przy użyciu tylko kwalifikacji potrzebnych do tego modułu.

VBFixedStringAttribute

Użyj VBFixedStringAttribute polecenia , aby wymusić utworzenie ciągu o stałej długości w języku Visual Basic. Ciągi mają domyślnie zmienną długość, a ten atrybut jest przydatny podczas przechowywania ciągów w plikach. Poniższy kod przedstawia następujący kod:

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

Służy VBFixedArrayAttribute do deklarowania tablic o stałym rozmiarze. Podobnie jak ciągi języka Visual Basic, tablice mają domyślnie zmienną długość. Ten atrybut jest przydatny podczas serializacji lub zapisywania danych w plikach.

Zobacz też