Udostępnij za pomocą


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 AssemblyVersionAttribute może służyć do osadzania informacji dotyczących 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 identyfikacyjne 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 łącznik zestawów (Al.exe) na podstawie pliku zawierającego manifest zestawu podczas tworzenia zestawu. Atrybut AssemblyFlagsAttribute określa, czy wiele kopii zestawu może współistnieć.

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

Atrybut Przeznaczenie
AssemblyName W pełni opisuje tożsamość zespołu.
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. Poniższa tabela przedstawia atrybuty informacyjne zdefiniowane w przestrzeni nazw System.Reflection.

Atrybut Przeznaczenie
AssemblyProductAttribute Definiuje niestandardowy atrybut określający nazwę produktu dla manifestu zestawu.
AssemblyTrademarkAttribute Definiuje niestandardowy atrybut, który określa znak towarowy dla 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 modułu.
AssemblyCopyrightAttribute Definiuje niestandardowy atrybut określający informacje o prawach autorskich 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ę. Poniższa tabela System.Reflection przedstawia atrybuty manifestu zestawu zdefiniowane w przestrzeni nazw.

Atrybut Przeznaczenie
AssemblyTitleAttribute Definiuje atrybut niestandardowy, który określa tytuł zestawu w manifeście 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 przyjazną domyślną nazwę podrzędną 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. 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 wartość true, ta metoda spowoduje błąd kompilatora, natomiast użycie klasy A spowoduje jedynie wyświetlenie ostrzeżenia. Wywołanie B.NewMethod nie powoduje 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 zaleca się podanie wyjaśnienia, dlaczego element jest przestarzały i co należy użyć zamiast niego.

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 w wersjach debugowania, ale nie w wersjach 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, wywołanie jest dołączane; w przeciwnym razie jest pomijane. 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 zarówno A, jak 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 niestandardowy atrybut Documentation doda informacje tylko do metadanych, jeśli zdefiniowano 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

Atrybuty informacji o dzwoniącym

Za pomocą 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ę członka wywołującego.

Aby uzyskać informacje o wywołującym członku, należy użyć atrybutów, które są oparte na parametrach opcjonalnych. Każdy opcjonalny parametr określa wartość domyślną. W poniższej tabeli wymieniono atrybuty "Informacje o wywołującym" zdefiniowane w przestrzeni nazw System.Runtime.CompilerServices.

Atrybut Opis Typ
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 funkcję wywołującą 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 Przeznaczenie
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 znacznie różnią się od zestawów .NET Framework, i bez COMClassAttribute, należy wykonać kilka kroków, aby wygenerować obiekt COM za pomocą języka Visual Basic. W przypadku klas oznaczonych za pomocą COMClassAttribute, 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 to demonstruje:

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

Użyj 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 także