Общие сведения об атрибутах (Visual Basic)

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

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

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

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

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

  • Программа может проверить собственные метаданные или метаданные в других программах, используя отражение. Дополнительные сведения см. в статье Accessing Attributes by Using Reflection (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

Примечание

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

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

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

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

Следующий пример демонстрирует, как применить атрибуты к сборкам и модулям. Дополнительные сведения см. в статье Common Attributes (Visual Basic) (Распространенные атрибуты (Visual Basic)).

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

Популярные методы применения атрибутов

В следующем списке перечислены несколько распространенных применений для атрибутов.

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

  • Описание способов упаковки параметров методов при взаимодействии с машинным кодом. Для получения дополнительной информации см. MarshalAsAttribute.

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

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

  • Указание для сборки таких параметров, как заголовок, версия, описание или товарный знак.

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

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

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

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

  • Управление оптимизацией для JIT-компилятора, сохраняя при этом простоту отладки кода.

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

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

См. также раздел