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 true
wartość , ta metoda spowoduje błąd kompilatora, natomiast użycie klasy A
spowoduje wyświetlenie ostrzeżenia. Wywołanie B.NewMethod
metody 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 COMClassAttribute
programu , należy wykonać kilka kroków w celu wygenerowania obiektu COM z poziomu visual basic. W przypadku klas oznaczonych za pomocą COMClassAttribute
polecenia 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.