Почему MemberInfo.GetCustomAttributes(Type) определен для возврата массива атрибутов?
public enum Animal
{
[Description("King of jungle")]
Lion= 1,
[Description("Tallest there")]
Giraffe = 2
}
Предположим, у меня есть FieldInfo
Я могу сделать это двумя способами:
//static one on 'Attribute' class
Attribute attribute = Attribute.GetCustomAttribute(field,
typeof(DescriptionAttribute),
false);
Все в порядке.
Но тот, что ниже, возвращает []
скорее, чем Attribute
?
//instance one on 'MemberInfo` class
var attributes = field.GetCustomAttributes(typeof(DescriptionAttribute), false);
Этот вопрос на самом деле не о выборе дизайна MS. Мой вопрос должен ли я быть обеспокоен field.GetCustomAttributes
возвращать несколько элементов для определенного типа атрибута? В каких случаях это произойдет?
[Description("King of jungle")]
[Description("I'm a lion")]
Lion= 1
Я думаю, это невозможно. Я думаю, что я должен справиться с этим при написании некоторых вспомогательных функций отражения.
1 ответ
Имеет смысл возвращать несколько элементов для каждого типа атрибута. Подумайте об атрибутах, разработанных с помощью базового класса. Или атрибуты, где вы могли бы предоставить несколько опций / типов по конструктору.
Одним из примеров является XmlArrayItemAttribute
См. MSDN: класс XmlArrayItemAttribute.
Если вы хотите ограничить использование ваших атрибутов только один раз, вы можете добавить allowmultiple:=False
пометить к вашему AttributeUsage
,
@Комментарий
DescriptionAttribute
has AllowMultiple:=False (по умолчанию, если вы его не указали - по крайней мере, в VB.NET). Чтобы получить эффект, создайте свой собственный атрибут, полученный из Attribute
и пометить его AttributeUsage
где вы установите AllowMultiple = True
,