我可能正在做一些愚蠢的事情,但就在这里。
我正试图通过反射从公共事件中获取FieldInfo。
检查此功能:
public void PlotAllFields(Type type) {
BindingFlags all = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;
FieldInfo[] fields = type.GetFields(all);
Console.WriteLine(type + "-------------------------");
foreach (var fieldInfo in fields) {
Console.WriteLine(fieldInfo.Name);
}
}
public class Bar : Foo {}
public class Foo {
public string Test;
public event EventHandler Event;
public event RoutedEventHandler RoutedEvent;
}
调用PlotAllFields(typeof(Foo));返回:
调用PlotAllFields(typeof(Bar));返回:
据我所知,活动背后的代表是私人领域 所以我无法在子类上访问它们。到目前为止一切都很好。
然后我尝试了:PlotAllFields(typeof(FrameworkElement)); //来自WPF
那么...... FrameworkElement类的14个事件在哪里???
答案 0 :(得分:2)
FrameworkElement不使用类似字段的事件,它会调用AddHandler和RemoveHandler。大多数情况下,他们没有附加处理程序,因此WPF使用更节省空间的系统。例如,这是来自Reflector:
的Loaded事件public event RoutedEventHandler Loaded
{
add
{
base.AddHandler(LoadedEvent, value, false);
}
remove
{
base.RemoveHandler(LoadedEvent, value);
}
}
答案 1 :(得分:0)
尝试这些绑定标志
BindingFlags.Default |
BindingFlags.FlattenHierarchy |
BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.Public