Por defecto, Attribute
s están limitados a ser aplicado una vez a un solo campo/propiedad/etc. Esto se puede ver desde el definition of the Attribute
class on MSDN:
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Por lo tanto, como han dicho otros, todas las subclases están limitados de la misma manera, y en caso de necesitar varias instancias del mismo atributo, es necesario establecer explícitamente AllowMultiple
a true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
en atributos que permiten múltiples usos, you should also override the TypeId
property para asegurar que las propiedades tales como PropertyDescriptor.Attributes
funciona como se espera. La forma más sencilla de hacerlo es poner en práctica esa propiedad para devolver la instancia propio atributo:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Publicación de esta respuesta no porque los otros están equivocados, sino porque se trata de una respuesta más amplia/canónica.)
Simplemente curioso, ¿por qué una clase "sellada"? –
Microsoft recomienda sellar clases de atributo siempre que sea posible: http://msdn.microsoft.com/en-us/library/2ab31zeh.aspx –
¿Por qué sellado? En resumen: hace que la búsqueda de atributos sea más rápida y no tiene otro impacto. –