给定以下类定义
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
属性信息?
最佳答案
field:
语法表示属性附加到由编译器生成的字段(以支持该字段)。你永远不会知道这个字段的名称,因为它是一个实现细节,它不是 EventInfo
的一部分(因为事件不需要专门由字段支持 - 它可以是代理,或 EventHandlerList
等)。
如果您需要该级别的信息,您可能希望手动实现该事件(而不是如图所示的“类似字段的事件”),但是;实际上,您很少需要知道这一点。此信息确实只有 BinaryFormatter
等需要,以表示“放开手”。
另一种方法是使用 GetFields()
,但又一次;不存在将字段映射到事件的可靠方法。
关于c# - 检查类字段事件背后生成字段的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065692/