Создание настраиваемых атрибутов (C# и 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
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct)
]
public class Author : System.Attribute
{
private string name;
public double version;
public Author(string name)
{
this.name = name;
version = 1.0;
}
}
В качестве имени класса используется имя атрибута Author. Он является производным от System.Attribute, следовательно, это класс настраиваемых атрибутов. Параметры конструктора являются позиционными параметрами настраиваемых атрибутов. В этом примере name является позиционным параметром. Все открытые поля чтения и записи и свойства являются именованными параметрами. В данном случае version является единственным именованным параметром. Обратите внимание, что атрибут AttributeUsage используется для того, чтобы атрибут Author был действителен только для объявлений классов и struct (Structure в Visual Basic).
Новый атрибут можно использовать следующим образом:
<Author("P. Ackerman", Version:=1.1)>
Class SampleClass
' P. Ackerman's code goes here...
End Class
[Author("P. Ackerman", version = 1.1)]
class SampleClass
{
// P. Ackerman's code goes here...
}
AttributeUsage имеет именованный параметр AllowMultiple, с помощью которого настраиваемый атрибут можно сделать одноразовым или многоразовым. В следующем примере кода создается многократно используемый атрибут.
' multiuse attribute
<System.AttributeUsage(System.AttributeTargets.Class Or
System.AttributeTargets.Struct,
AllowMultiple:=True)>
Public Class Author
Inherits System.Attribute
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct,
AllowMultiple = true) // multiuse attribute
]
public class Author : 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
[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...
}
Примечание
Если в классе атрибута содержится свойство, то оно должно быть доступно для чтения и записи.
См. также
Ссылки
Обращение к атрибутам с помощью отражения (C# и Visual Basic)
AttributeUsage (C# и Visual Basic)
Основные понятия
Руководство по программированию на C#
Написание настраиваемых атрибутов