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


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

Атрибуты (C# и Visual Basic)

Обращение к атрибутам с помощью отражения (C# и Visual Basic)

System.Reflection

AttributeUsage (C# и Visual Basic)

Основные понятия

Руководство по программированию на C#

Написание настраиваемых атрибутов

Другие ресурсы

Руководство по программированию на Visual Basic