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