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


Общие атрибуты (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 помечает сущность программы как сущность, которая больше не рекомендуется использовать. Каждое использование сущности, помеченной как устаревшая, впоследствии создает предупреждение или ошибку в зависимости от того, как настроен атрибут. Рассмотрим пример.

<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 является псевдонимом для 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 атрибутов, вызов метода включается, если определен по крайней мере один из условных символов (другими словами, символы логически связаны с помощью оператора OR). В этом примере наличие либо A, либо B приведет к вызову метода.

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

End Sub

Чтобы добиться эффекта логического связывания символов с помощью оператора AND, можно определить последовательные условные методы. Например, второй метод ниже будет выполняться только в том случае, если определены и 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 также может применяться к определению класса атрибута. В этом примере настраиваемый атрибут Documentation будет добавлять сведения только в метаданные, если определена ОТЛАДКА.

<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, массивы имеют переменную длину по умолчанию. Этот атрибут полезен при сериализации или записи данных в файлы.

См. также