По умолчанию 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;
}
}
}
(Публикация этого ответа не потому, что другие не правы, а потому, что это более полный / канонический ответ.)