Какой самый простой и элегантный способ использовать пользовательский атрибут - PullRequest
3 голосов
/ 29 июля 2010

Итак, небольшое признание, я никогда не писал класс атрибутов. Я понимаю, что они служат для украшения классов с флагами или дополнительной функциональностью, возможно.

Может ли кто-нибудь дать мне быстрый пример не просто создания и применения атрибута к классу, а скорее использования атрибута из другого блока кода. Единственные примеры кода, которые я когда-либо видел, чтобы использовать любую форму атрибутов, делали это с отражением, хотя я всегда надеялся, что есть способ использовать их без отражения.

Ответы [ 3 ]

8 голосов
/ 29 июля 2010

Атрибуты всегда используются с отражением. Они включаются в метаданные типов во время компиляции, и единственный способ прочитать их - это отражение. Атрибуты используются, когда вы хотите написать тип и хотите связать с ним некоторые метаданные, которые могут использоваться потребителями этого типа.

6 голосов
/ 29 июля 2010

Самый простой и элегантный способ использовать атрибут из другого блока кода - использовать свойство вместо атрибута .

См. http://blogs.msdn.com/b/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx для обсужденияразличий между свойствами и атрибутами.

3 голосов
/ 29 июля 2010

Сначала создайте свой атрибут

public class ImportableAttribute : Attribute
{

}

Затем класс с элементом, который использует Атрибут

[ImportableAttribute]
public class ImportClass
{
    [ImportableAttribute]
    public string Item {get; set;}
}

Затем проверьте, использует ли это свойство этот атрибут. Можно сделать с классами для .. Конечно:)

PropertyInfo property = typeof(ImportClass).GetProperty("Item");

if (property.IsDefined(typeof(ImportableAttribute),true))
{
     // do something
}

С классом:

typeof(ImportClass).IsDefined(typeof(ImportableAttribute), true);
...