Проверка атрибутов в сгенерированном поле за похожим на поле событием - PullRequest
5 голосов
/ 30 января 2012

Учитывая следующее определение класса

public class MyClass
{
    [System.ComponentModel.Browsable(true)]
    [field:NonSerialized]
    public event EventHandler MyEvent;
}

Где-то еще в моем коде, я хотел бы видеть атрибуты события.

var attributes = typeof(MyClass)
                     .GetEvents()
                     .SelectMany(n => n.GetCustomAttributes(true));

Но я вижу только BrowsableAttributeв этой коллекции атрибутов.

Как получить информацию об атрибуте field:NonSerialized?

1 Ответ

2 голосов
/ 30 января 2012

Синтаксис field: означает, что атрибут прикреплен к полю, сгенерированному компилятором (для поддержки этого поля). Вы никогда не узнаете имя этого поля, так как оно является деталью реализации, и оно не является частью EventInfo (поскольку события не нуждаются в особой поддержке поля - это может быть прокси или EventHandlerList и т. Д.).

Если вам нужен такой уровень информации, вы можете захотеть реализовать событие вручную (а не «похожее на поле событие», как изображено), но; на самом деле это редко нужно знать это. Эта информация действительно необходима только для BinaryFormatter и др., Чтобы сказать "руки прочь".

Другой подход - использовать GetFields(), но снова; надежного способа сопоставления полей событиям не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...