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


Обзор атрибутов (Visual Basic)

Атрибуты предоставляют мощный метод связывания метаданных или декларативной информации с кодом (сборки, типы, методы, свойства и т. д.). После связывания атрибута с сущностью программы атрибут можно запрашивать во время выполнения с помощью метода отражения. Дополнительные сведения см. в разделе "Отражение" (Visual Basic).

Атрибуты имеют следующие свойства:

  • Атрибуты добавляют метаданные в программу. метаданные — это сведения о типах, определенных в программе. Все сборки .NET содержат указанный набор метаданных, описывающий типы и члены типов, определенные в сборке. Вы можете добавить настраиваемые атрибуты, чтобы указать все необходимые дополнительные сведения. Дополнительные сведения см. в статье "Создание настраиваемых атрибутов ( Visual Basic)".

  • Можно применить один или несколько атрибутов ко всем сборкам, модулям или небольшим элементам программы, таким как классы и свойства.

  • Атрибуты могут принимать аргументы так же, как методы и свойства.

  • Программа может изучить собственные метаданные или метаданные в других программах с помощью отражения. Дополнительные сведения см. в разделе "Доступ к атрибутам с помощью отражения" (Visual Basic).

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

Атрибуты можно поместить в большинство объявлений, хотя определенный атрибут может ограничить типы объявлений, для которых он действителен. В Visual Basic атрибут заключен в угловые скобки (<>). Он должен отображаться непосредственно перед элементом, к которому он применяется, в той же строке.

В этом примере атрибут SerializableAttribute используется для применения определенной характеристики к классу:

<System.Serializable()> Public Class SampleClass
    ' Objects of this type can be serialized.
End Class

Метод с атрибутом DllImportAttribute объявляется следующим образом:

Imports System.Runtime.InteropServices
<System.Runtime.InteropServices.DllImport("user32.dll")>
Sub SampleMethod()
End Sub

Несколько атрибутов можно поместить в объявление:

Imports System.Runtime.InteropServices
Sub MethodA(<[In](), Out()> ByVal x As Double)
End Sub
Sub MethodB(<Out(), [In]()> ByVal x As Double)
End Sub

Некоторые атрибуты можно указать несколько раз для определенной сущности. Примером такого многопользовательского атрибута является ConditionalAttribute:

<Conditional("DEBUG"), Conditional("TEST1")>
Sub TraceMethod()
End Sub

Замечание

По соглашению все имена атрибутов заканчиваются словом "Атрибут", чтобы отличить их от других элементов в .NET Framework. Однако при использовании атрибутов в коде не требуется указывать суффикс атрибутов. Например, [DllImport] эквивалентно [DllImportAttribute], но DllImportAttribute является фактическим именем атрибута в .NET Framework.

Параметры атрибута

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

<DllImport("user32.dll")>
<DllImport("user32.dll", SetLastError:=False, ExactSpelling:=False)>
<DllImport("user32.dll", ExactSpelling:=False, SetLastError:=False)>

Первый параметр, имя библиотеки DLL, позиционный и всегда приходит первым; другие называются. В этом случае оба именованных параметра по умолчанию используют значение false, поэтому они могут быть опущены. Сведения о значениях параметров по умолчанию см. в документации по отдельным атрибутам.

Целевые объекты атрибутов

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

Чтобы явно определить целевой объект атрибута, используйте следующий синтаксис:

<target : attribute-list>

Список возможных значений target показан в следующей таблице.

Целевое значение Применимо к
assembly Вся сборка
module Текущий модуль сборки (который отличается от модуля Visual Basic)

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

Imports System.Reflection
<Assembly: AssemblyTitleAttribute("Production assembly 4"),
Module: CLSCompliant(True)>

Распространенные способы использования атрибутов

В следующем списке приведены некоторые распространенные способы использования атрибутов в коде:

  • Пометка методов с помощью атрибута WebMethod в веб-службах, чтобы указать, что метод должен вызываться по протоколу SOAP. Дополнительные сведения см. в разделе WebMethodAttribute.

  • Как осуществлять маршалирование параметров метода при взаимодействии с нативным кодом. Дополнительные сведения см. в разделе MarshalAsAttribute.

  • Описание свойств COM для классов, методов и интерфейсов.

  • Вызов неуправляемого кода с помощью класса DllImportAttribute.

  • Описание сборки с точки зрения названия, версии, описания или торговой марки.

  • Описание элементов класса, подлежащих сериализации для устойчивости.

  • Описание сопоставления между членами класса и XML-узлами для сериализации XML.

  • Описание требований безопасности для методов.

  • Указание характеристик, используемых для обеспечения безопасности.

  • Управление оптимизацией с помощью JIT-компилятора, чтобы код оставался простым для отладки.

  • Получение сведений о вызывающем методе.

Дополнительные сведения можно найти здесь

См. также