检查类似字段事件后面生成的字段上的属性

时间:2012-01-30 14:48:07

标签: c# reflection attributes

给出以下类定义

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 个答案:

答案 0 :(得分:2)

field:语法表示该属性附加到编译器生成的字段(以支持此字段)。你永远不会知道这个字段的名称,因为它是一个实现细节,它不是EventInfo的一部分(因为事件不需要特定的字段支持 - 它可以被代理,或者EventHandlerList等。

如果您需要该级别的信息,您可能希望手动实现该事件(而不是如图所示的“类似字段的事件”),但是;实际上,你很少需要知道这一点。 BinaryFormatter等人只需要这些信息 来说“放手”。

另一种方法是使用GetFields(),但同样;没有将字段映射到事件的强大方法。