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, массивы имеют переменную длину по умолчанию. Этот атрибут полезен при сериализации или записи данных в файлы.
См. также
- System.Reflection
- Attribute
- Руководство по программированию на Visual Basic
- Атрибуты
- Reflection (Visual Basic) (Отражение (Visual Basic))
- Accessing Attributes by Using Reflection (Visual Basic) (Обращение к атрибутам с помощью отражения (Visual Basic))