Secara default, Attribute
s dibatasi untuk diterapkan hanya sekali ke satu bidang / properti / etc. Anda dapat melihat ini dari definisi Attribute
kelas di MSDN :
[AttributeUsageAttribute(..., AllowMultiple = false)]
public abstract class Attribute : _Attribute
Oleh karena itu, seperti yang telah dicatat orang lain, semua subclass dibatasi dengan cara yang sama, dan jika Anda memerlukan beberapa instance dari atribut yang sama, Anda perlu menyetel secara eksplisit AllowMultiple
ke true
:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
Pada atribut yang memungkinkan beberapa penggunaan, Anda juga harus mengganti TypeId
properti untuk memastikan bahwa properti PropertyDescriptor.Attributes
berfungsi seperti yang diharapkan. Cara termudah untuk melakukannya adalah dengan mengimplementasikan properti itu untuk mengembalikan instance atribut itu sendiri:
[AttributeUsage(..., AllowMultiple = true)]
public class MyCustomAttribute : Attribute
{
public override object TypeId
{
get
{
return this;
}
}
}
(Memposting jawaban ini bukan karena yang lain salah, tetapi karena ini adalah jawaban yang lebih komprehensif / kanonik.)