以下代码无法找到私人字段,例如,如果主机为Application.Current
且成员为" _ownDispatcherStarted",则返回一个空数组,但如果我找一个私有属性,例如成员是" ParkingHwnd",它返回一个长度为1的数组;它发现没问题。那是为什么?
var hostType = host.GetType();
var members = host.GetType()
.GetMember(member, Public | NonPublic | Instance);
答案 0 :(得分:3)
我刚做了一些实验。根据文档,您需要指定BindingFlags.DeclaredOnly
以排除继承的成员,但在我的测试中,我发现我无法让继承的成员出现在GetMember
的返回值中,{{1 }或GetFields
。
使用默认的WPF应用程序时,GetField
不是Application.Current
的直接实例,而是Application
中定义的Application
的子类。我发现,如果我使用App.xaml
,则可以发现host.GetType().BaseType
等字段。
因此,为了一般性地查找_ownDispatcherStarted
基类声明的字段,您可能需要在Application
之后重复遍历继承树,直到找到您要查找的成员为止或打到根。
这不是我预期的结果,但希望它会让你前进。 : - )