Практическое руководство. Предоставление описаний компонента в форме метаданных
С помощью attributes можно предоставлять описательные метаданные о компоненте. Атрибуты представляют собой специализированные классы, применяемые к элементам кода. Во время компиляции атрибуты преобразуются в метаданные, которые доступны для общеязыковой среды выполнения или пользовательских средств и приложений с помощью пространства имен System.Reflection.
Атрибуты присоединяются к компонентам путем добавления непосредственно перед компонентом ссылок на атрибут. В атрибутах содержатся любые необходимые параметры или флаги. Вызов конструктора атрибутов помещается в угловые скобки <> в Visual Basic и квадратные скобки [] в C#.
По правилам именования имена всех классов атрибутов заканчиваются словом "Attribute". В качестве примера можно указать классы DescriptionAttribute, ObsoleteAttribute и BrowsableAttribute. Однако в некоторых языках, исполняемых в общеязыковой среде выполнения, в том числе в Visual Basic и C#, полное имя атрибута не является необходимым. Например, для ссылок на атрибут ObsoleteAttribute в коде может использоваться сокращенное имя Obsolete.
Чтобы присоединить существующий атрибут к компоненту, выполните следующие действия.
Определите, какие атрибуты необходимы для компонента.
Присоедините атрибуты к компоненту. Обратите внимание, что необходимо либо использовать полное имя атрибута, либо добавлять соответствующий оператор Imports (using). В следующем примере показано присоединение атрибута DescriptionAttribute.
Imports System.ComponentModel <Description("This is a description string")> Public Class TheClass End Class
using System.ComponentModel; [Description("This is a description string")] public class TheClass { }
Пользовательские атрибуты
Пользователь может создавать собственные атрибуты для использования в пользовательских средствах и приложениях, наследуя их от класса Attribute. К этому базовому классу можно добавить любые пользовательские свойства или методы, необходимые в приложении.
Чтобы создать и применить пользовательский атрибут, выполните следующие действия.
Создайте класс, наследуемый от Attribute.
Public Class WidgetAttribute Inherits System.Attribute End Class
public class WidgetAttribute: System.Attribute { }
Определите свойства и методы, необходимые атрибуту, и напишите их код. В следующем примере показано, как создать свойство WidgetType, задаваемое в конструкторе класса WidgetAttribute. АтрибутAttributeUsageAttribute определяет, к каким элементам кода будет присоединяться атрибут.
<AttributeUsage(System.AttributeTargets.Class)> Public Class _ WidgetAttribute Inherits System.Attribute Private mWidgetType as WidgetTypeEnum ' Creates a readonly property for the WidgetAttribute class. Public ReadOnly Property WidgetType as WidgetTypeEnum Get Return mWidgetType End Get End Property ' Creates a constructor that accepts a parameter and assigns the ' value of that parameter to the WidgetType property. Public Sub New(type as WidgetTypeEnum) MyBase.New() mWidgetType = type End Sub End Class
[AttributeUsage(System.AttributeTargets.Class)] public class WidgetAttribute: System.Attribute { private WidgetTypeEnum widgetType; // Creates a readonly property for the WidgetAttribute class. public WidgetTypeEnum WidgetType { get {return widgetType;} } public WidgetAttribute(WidgetTypeEnum type): base() { widgetType = type; } }
Используйте этот атрибут так же, как и другие атрибуты; проверьте, установлены ли все необходимые параметры.
<WidgetAttribute(WidgetTypeEnum.VerticalWidget)> _ Public Class WidgetFortyFive End Class
[WidgetAttribute(WidgetTypeEnum.VerticalWidget)] public class WidgetFortyFive { }
См. также
Задачи
Практическое руководство. Предоставление метаданных для свойств, методов и событий компонента
Ссылки
Основные понятия
Доступ к пользовательским атрибутам
Извлечение информации, сохраненной в атрибуте