Theo mặc định, Attribute
s được giới hạn được áp dụng một lần duy nhất vào một trường duy nhất/tài sản/etc. Bạn có thể thấy điều này từ definition of the Attribute
class on MSDN:
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Vì vậy, 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 thiết lập một cách rõ ràng AllowMultiple
để true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Mở thuộc tính cho phép nhiều tập quán, you should also override the TypeId
property để đảm bảo rằng các đặc tính như PropertyDescriptor.Attributes
công việc như mong đợi. Cách đơn giản nhất để làm điều này là để thực hiện điều đó tài sản để trả lại ví dụ thuộc tính riêng của mình:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(gửi bài trả lời này không phải vì những người khác là sai, nhưng vì đây là một câu trả lời toàn diện hơn/kinh điển.)
Nguồn
2017-03-03 09:37:34
Chỉ tò mò - tại sao một lớp "kín"? –
Microsoft khuyến cáo niêm phong các lớp thuộc tính bất cứ khi nào có thể: http://msdn.microsoft.com/en-us/library/2ab31zeh.aspx –
Tại sao bị niêm phong? Tóm lại: Giúp tra cứu thuộc tính nhanh hơn và không có tác động nào khác. –