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


Создание настраиваемых атрибутов (Visual Basic)

Вы можете создавать собственные настраиваемые атрибуты, определяя класс атрибутов, класс, производный напрямую или косвенно от Attribute, что позволяет быстро и легко идентифицировать определения атрибутов в метаданных. Предположим, вы хотите пометить типы с именем программиста, который написал тип. Можно определить пользовательский Author класс атрибутов:

<System.AttributeUsage(System.AttributeTargets.Class Or
                       System.AttributeTargets.Struct)>
Public Class Author
    Inherits System.Attribute
    Private name As String
    Public version As Double
    Sub New(ByVal authorName As String)
        name = authorName
        version = 1.0
    End Sub
End Class

Имя класса — это имя Authorатрибута. Он является производным от System.Attribute, поэтому это класс пользовательских атрибутов. Параметры конструктора — это позиционные параметры настраиваемого атрибута. В этом примере name используется позиционный параметр. Все открытые поля или свойства для чтения и записи являются именованными параметрами. В этом случае version является единственным именованным параметром. Обратите внимание на использование атрибута AttributeUsage, чтобы атрибут Author был допустим только в объявлениях классов и Structure.

Этот новый атрибут можно использовать следующим образом:

<Author("P. Ackerman", Version:=1.1)>
Class SampleClass
    ' P. Ackerman's code goes here...
End Class

AttributeUsage имеет именованный параметр, AllowMultiple, с помощью которого можно сделать атрибут настраиваемым на одноразовое или многоразовое использование. В следующем примере кода создается многопользовательский атрибут.

' multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or
                       System.AttributeTargets.Struct,
                       AllowMultiple:=True)>
Public Class Author
    Inherits System.Attribute

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

<Author("P. Ackerman", Version:=1.1),
Author("R. Koch", Version:=1.2)>
Class SampleClass
    ' P. Ackerman's code goes here...
    ' R. Koch's code goes here...
End Class

Замечание

Если класс атрибута содержит свойство, это свойство должно поддерживать чтение и запись.

См. также