Создание настраиваемых атрибутов (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#
Написание настраиваемых атрибутов