Answers:
将AttributeUsage
属性粘贴到Attribute类上(是的,这很麻烦)并设置AllowMultiple
为true
:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class MyCustomAttribute: Attribute
AttributeUsageAttribute ;-p
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class MyAttribute : Attribute
{}
但是请注意,如果使用的是ComponentModel(TypeDescriptor
),则每个成员仅支持一个属性实例(每种属性类型)。原始反射支持任何数量...
默认情况下,Attribute
s仅限于一次应用于单个字段/属性/等。您可以从MSDN 上的Attribute
类定义中看到以下内容:
[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;
}
}
}
(发布此答案不是因为其他答案是错误的,而是因为这是更全面/规范的答案。)
或者,考虑重新设计属性以允许序列。
[MyCustomAttribute(Sequence="CONTROL,ALT,SHIFT,D")]
要么
[MyCustomAttribute("CONTROL-ALT-SHIFT-D")]
然后解析这些值以配置您的属性。
有关此示例,请访问www.codeplex.com/aspnet上的 ASP.NET MVC源代码中的AuthorizeAttribute 。
MyCustomAttribute
构造函数采用带有或不带有修饰符的字符串数组 a 。然后可以将其与语法一起使用(使用)。string[]
params
[MyCustom("CONTROL", "ALT", "SHIFT", "D")]
params