Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Вы можете создавать собственные настраиваемые атрибуты, определяя класс атрибутов, класс, производный напрямую или косвенно от Attribute, что позволяет быстро и легко идентифицировать определения атрибутов в метаданных. Предположим, вы хотите пометить типы с именем программиста, который написал тип. Можно определить пользовательский Author класс атрибутов:
[System.AttributeUsage(System.AttributeTargets.Class |
System.AttributeTargets.Struct)
]
public class AuthorAttribute : System.Attribute
{
private string Name;
public string 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 string 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
{
// ...
}