За замовчуванням Attribute
s обмежуються тим, що застосовуються лише один раз до одного поля / властивості / тощо. Це можна побачити з визначення Attribute
класу на MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Тому, як і інші відзначали, все підкласи обмежені таким же чином, і якщо вам буде потрібно кілька примірників одного і того ж атрибута, вам потрібно явно встановити AllowMultiple
на true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Для атрибутів, що дозволяють багаторазове використання, слід також перевизначити TypeId
властивість, щоб забезпечити PropertyDescriptor.Attributes
роботу таких властивостей, як очікувано. Найпростіший спосіб зробити це - застосувати це властивість для повернення самого екземпляра атрибута:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Опублікувати цю відповідь не тому, що інші помиляються, а тому, що це більш всебічна / канонічна відповідь.)