AttributeUsage
позволяет задать атрибуты для одно- и многократного применения. Это определит, как много раз один атрибут может быть задействован с одним полем. По умолчанию все атрибуты используются однократно. Это означает, что при компиляции следующего кода возникнет ошибка компилятора:
using System;
using System.Reflection;
public class SingleUseAttribute : Attribute {
{
> }
// ОШИБКА: возникает ошибка компилятора "duplicate attribute".
[SingleUse("abc")]
[SingleUse("def")]
class MyClass
{
}
class SinglellseApp {
public static void Main()
{
} }
Чтобы исправить эту ошибку, укажите в
строке Attribute Usage,
что вы хотите разрешить многократное использование атрибута с данным типом. Этот код будет работать:
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.All, AllowMultiple=true)]
public class SingleUseAttribute : Attribute
{
public SingleUseAttribute(String str)
{
}
>
[SingleUse("abc")]
[SingleUse("def")]
class MyClass
{
>
class MultiUseApp {
public static void Main()
{ } }
Практическим примером использования этого подхода служит атрибут
RegistryKeyAttribute
(см. раздел "Определение атрибутов"). Поскольку вполне реально, что поле может быть сохранено в нескольких местах реестра, можете прикрепить
атрибут Attribute Usage
с именованным параметром
AllowMultiple,
как показано в примере выше.