Поделиться через


Common Attributes (Visual Basic) (Распространенные атрибуты (Visual Basic))

В этом разделе описываются атрибуты, которые чаще всего используются в программах Visual Basic.

Глобальные атрибуты

Большинство атрибутов применяется к определенным элементам языка, таким как классы или методы. Тем не менее некоторые атрибуты являются глобальными — они применяются ко всей сборке или модулю. Например, атрибут AssemblyVersionAttribute можно использовать для встраивания сведений о версии в сборку, например следующим образом:

<Assembly: AssemblyVersion("1.0.0.0")>

Глобальные атрибуты отображаются в исходном коде после любых операторов верхнего уровня Imports и до любого типа, модуля или объявления пространства имен. Глобальные атрибуты могут содержаться в нескольких исходных файлах, однако эти файлы должны быть скомпилированы за один проход компиляции. Для проектов Visual Basic глобальные атрибуты обычно помещаются в файл AssemblyInfo.vb (файл создается автоматически при создании проекта в Visual Studio).

Атрибуты сборки — это значения, которые предоставляют сведения о сборке. Они делятся на следующие категории:

  • Атрибуты удостоверения сборки

  • Информационные атрибуты

  • Атрибуты манифеста сборки

Атрибуты удостоверения сборки

Три атрибута (со строгим именем, если оно применимо) определяют удостоверение сборки: имя, версию, язык и региональные параметры. Эти атрибуты формируют полное имя сборки и являются обязательными при ссылке на нее в коде. Атрибуты можно использовать для задания версии сборки и языка и региональных параметров. Однако значение имени задается компилятором, в интегрированной среде разработки Visual Studio, в диалоговом окне сведений о сборке или в компоновщике сборок (Al.exe) при создании сборки на основе файла, содержащего манифест сборки. Атрибут AssemblyFlagsAttribute указывает, могут ли сосуществовать несколько копий сборки.

В следующей таблице приведены атрибуты удостоверения.

Атрибут Характер использования
AssemblyName Полностью описывает удостоверение сборки.
AssemblyVersionAttribute Задает версию сборки.
AssemblyCultureAttribute Указывает, какой язык и региональные параметры поддерживает сборка.
AssemblyFlagsAttribute Указывает, поддерживает ли сборка параллельное выполнение на одном компьютере, в одном процессе или в одном домене приложения.

Информационные атрибуты

Информационные атрибуты можно использовать для предоставления дополнительных сведений о компании или продукте в сборке. В следующей таблице показаны информационные атрибуты, определенные в пространстве имен System.Reflection.

Атрибут Характер использования
AssemblyProductAttribute Определяет настраиваемый атрибут, задающий имя продукта для манифеста сборки.
AssemblyTrademarkAttribute Определяет настраиваемый атрибут, задающий товарный знак для манифеста сборки.
AssemblyInformationalVersionAttribute Определяет настраиваемый атрибут, задающий информационную версию для манифеста сборки.
AssemblyCompanyAttribute Определяет настраиваемый атрибут, задающий название организации для манифеста сборки.
AssemblyCopyrightAttribute Определяет настраиваемый атрибут, задающий уведомление об авторских правах для манифеста сборки.
AssemblyFileVersionAttribute Дает компилятору указание использовать определенный номер версии для ресурса версии файла Win32.
CLSCompliantAttribute Указывает, соответствует ли сборка спецификации CLS.

Атрибуты манифеста сборки

Атрибуты манифеста сборки можно использовать для предоставления сведений в манифесте сборки. К ним относится заголовок, описание, псевдоним по умолчанию и конфигурация. В следующей таблице показаны атрибуты манифеста сборки, определенные в пространстве имен System.Reflection.

Атрибут Характер использования
AssemblyTitleAttribute Определяет настраиваемый атрибут, задающий название сборки для манифеста сборки.
AssemblyDescriptionAttribute Определяет настраиваемый атрибут, задающий описание сборки для манифеста сборки.
AssemblyConfigurationAttribute Определяет настраиваемый атрибут, задающий конфигурацию сборки для манифеста сборки.
AssemblyDefaultAliasAttribute Определяет понятный псевдоним по умолчанию для манифеста сборки.

Атрибут Obsolete

Атрибут Obsolete помечает сущность программы как нерекомендуемую для использования. Каждый случай использования сущности, помеченной как устаревшая, будет приводить к созданию предупреждения или сообщения об ошибке в зависимости от настройки атрибута. Например:

<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

В этом примере атрибут Obsolete применяется к классу A и к методу B.OldMethod. Поскольку для второго аргумента конструктора атрибутов, примененного к B.OldMethod, задано значение true, этот метод будет вызывать ошибку компилятора, тогда как при использовании класса A будет просто создаваться предупреждение. При этом вызов B.NewMethod не создает предупреждений или ошибок.

Строка, предоставленная в качестве первого аргумента конструктору атрибута, будет отображаться как часть предупреждения или ошибки. Например, при использовании с предыдущими определениями следующий код создает два предупреждения и одну ошибку:

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

Создается два предупреждения для класса A: одно для объявления ссылки на класс, а второе — для конструктора класса.

Атрибут Obsolete может использоваться без аргументов, однако рекомендуется включать пояснение о том, почему соответствующий элемент является устаревшим и что следует использовать вместо него.

Атрибут Obsolete является атрибутом однократного использования и может применяться к любой сущности, допускающей использование атрибутов. Obsolete является псевдонимом для ObsoleteAttribute.

Атрибут Conditional

Атрибут Conditional определяет зависимость выполнения метода от идентификатора предварительной обработки. Атрибут Conditional является псевдонимом для ConditionalAttribute и может применяться к методу или классу атрибута.

В этом примере атрибут Conditional применяется к методу для включения и отключения отображения диагностической информации для конкретной программы:

#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 не определен, выходные данные трассировки не отображаются.

Атрибут Conditional часто используется с идентификатором DEBUG для включения функций трассировки и ведения журнала для отладочных сборок (но не сборок выпуска) следующим образом:

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

End Sub

Когда вызывается метод, помеченный как условный, наличие или отсутствие заданного символа предварительной обработки определяет, включается ли вызов или пропускается. Если этот символ определен, вызов включается; в противном случае вызов пропускается. Использование атрибута Conditional — это более понятная, элегантная и менее подверженная ошибкам альтернатива вложению методов в блоки #if…#endif, например следующим образом:

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

Условный метод должен быть методом в объявлении класса или структуры и не должен возвращать значение.

Использование нескольких идентификаторов

Если метод содержит несколько атрибутов Conditional, вызов метода включается, если определен хотя бы один из условных символов (другими словами, символы логически связаны с помощью оператора ИЛИ). В этом примере наличие A или B приведет к вызову метода:

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

End Sub

Для получения эффекта логического связывания символов с помощью оператора И можно определить последовательные условные методы. Например, второй метод ниже будет выполняться, только если определены A и 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

Использование атрибута Conditional с классами атрибутов

Атрибут Conditional также может применяться к определению класса атрибута. В этом примере настраиваемый атрибут Documentation добавит сведения в метаданные, только если задано значение 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

Информационные атрибуты вызывающего объекта

С помощью информационных атрибутов вызывающего объекта можно получить сведения о вызывающем объекте метода. Можно получить путь к файлу исходного кода, номер строки в исходном коде и имя вызывающего объекта.

Для получения этих сведений используются атрибуты, которые применяются к необязательным параметрам. Каждый необязательный параметр задает значение по умолчанию. В следующей таблице перечислены информационные атрибуты вызывающего объекта, которые определены в пространстве имен System.Runtime.CompilerServices:

Атрибут Описание Тип
CallerFilePathAttribute Полный путь исходного файла, содержащего вызывающий объект. Это путь во время компиляции. String
CallerLineNumberAttribute Номер строки в исходном файле, из которого вызывается метод. Integer
CallerMemberNameAttribute Имя свойства или метода вызывающего объекта. Дополнительные сведения см. в разделе "Сведения о вызывающем объекте" (Visual Basic). String
CallerArgumentExpressionAttribute Выражение, используемое вызывающим для аргумента. Дополнительные сведения см. в разделе "Сведения о вызывающем объекте" (Visual Basic). String

Дополнительные сведения об атрибутах сведений о вызываемом объекте см. в разделе "Сведения о вызывающем объекте" (Visual Basic).

Атрибуты Visual Basic

В следующей таблице перечислены атрибуты, относящиеся к Visual Basic.

Атрибут Характер использования
ComClassAttribute Указывает компилятору, что класс должен быть предоставлен как COM-объект.
HideModuleNameAttribute Позволяет членам модуля получать доступ только к квалификации, необходимой для модуля.
VBFixedStringAttribute Задает размер строки фиксированной длины в структуре для использования с входными и выходными функциями файлов.
VBFixedArrayAttribute Задает размер фиксированного массива в структуре для использования с входными и выходными функциями файлов.

COMClassAttribute

Используйте COMClassAttribute для упрощения процесса создания COM-компонентов из Visual Basic. COM-объекты значительно отличаются от платформа .NET Framework сборок и без COMClassAttributeних необходимо выполнить ряд шагов для создания COM-объекта из Visual Basic. Для классов, помеченных как COMClassAttribute", компилятор выполняет многие из этих действий автоматически.

HideModuleNameAttribute

Используется HideModuleNameAttribute для доступа к членам модуля, используя только квалификацию, необходимую для модуля.

VBFixedStringAttribute

Используйте для VBFixedStringAttribute принудительного создания строки фиксированной длины Visual Basic. Строки имеют переменную длину по умолчанию, и этот атрибут по умолчанию полезен при хранении строк в файлах. В следующем коде показано следующее:

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

Используется VBFixedArrayAttribute для объявления массивов, фиксированных в размере. Как и строки Visual Basic, массивы имеют переменную длину по умолчанию. Этот атрибут полезен при сериализации или записи данных в файлы.

См. также