Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете создавать собственные настраиваемые атрибуты, определяя класс атрибутов, класс, производный напрямую или косвенно от Attribute, что позволяет быстро и легко идентифицировать определения атрибутов в метаданных. Предположим, вы хотите пометить типы с именем программиста, который написал тип. Можно определить пользовательский Author
класс атрибутов:
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct)
]
public class AuthorAttribute : System.Attribute
{
private string Name;
public double Version;
public AuthorAttribute(string name)
{
Name = name;
Version = 1.0;
}
}
Имя класса — это имя атрибута AuthorAttribute
, плюс суффикс Author
. Он является производным от System.Attribute
, поэтому это класс настраиваемых атрибутов. Параметры конструктора — это позиционные параметры настраиваемого атрибута. В этом примере name
используется позиционный параметр. Все открытые поля или свойства для чтения и записи являются именованными параметрами. В этом случае version
является единственным именованным параметром. Обратите внимание на использование атрибута AttributeUsage
, чтобы атрибут Author
был допустим только в объявлениях классов и struct
.
Этот новый атрибут можно использовать следующим образом:
[Author("P. Ackerman", Version = 1.1)]
class SampleClass
{
// P. Ackerman's code goes here...
}
AttributeUsage
имеет именованный параметр, AllowMultiple
, с помощью которого можно сделать атрибут настраиваемым на одноразовое или многоразовое использование. В следующем примере кода создается многопользовательский атрибут.
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct,
AllowMultiple = true) // Multiuse attribute.
]
public class AuthorAttribute : System.Attribute
{
string Name;
public double Version;
public AuthorAttribute(string name)
{
Name = name;
// Default value.
Version = 1.0;
}
public string GetName() => Name;
}
В следующем примере кода к классу применяются несколько атрибутов одного типа.
[Author("P. Ackerman"), Author("R. Koch", Version = 2.0)]
public class ThirdClass
{
// ...
}