Theo mặc định, Attribute
s được giới hạn chỉ được áp dụng một lần cho một trường / thuộc tính / v.v. Bạn có thể thấy điều này từ định nghĩa của Attribute
lớp trên MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Do đó, như những người khác đã lưu ý, tất cả các lớp con được giới hạn trong cùng một cách, và bạn nên yêu cầu nhiều trường hợp của các thuộc tính giống nhau, bạn cần phải rõ ràng thiết AllowMultiple
để true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Trên các thuộc tính cho phép nhiều cách sử dụng, bạn cũng nên ghi đè thuộc TypeId
tính đó để đảm bảo rằng các thuộc tính đó PropertyDescriptor.Attributes
hoạt động như mong đợi. Cách dễ nhất để làm điều này là triển khai thuộc tính đó để trả về bản thân thuộc tính:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Đăng câu trả lời này không phải vì những câu khác sai, mà vì đây là câu trả lời toàn diện / kinh điển hơn.)