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