Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете создавать собственные настраиваемые атрибуты, определяя класс атрибутов, класс, производный напрямую или косвенно от 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
Замечание
Если класс атрибута содержит свойство, это свойство должно поддерживать чтение и запись.