在类似字段的事件后面检查生成的字段上的属性
本文关键字:字段 属性 检查 事件 | 更新日期: 2023-09-27 18:22:05
给定以下类定义
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()
;不存在将字段映射到事件的健壮方法。