无法在wpf

时间:2017-01-24 18:21:31

标签: c# wpf visual-studio reflection

以下代码无法找到私人字段,例如,如果主机Application.Current成员为" _ownDispatcherStarted",则返回一个空数组,但如果我找一个私有属性,例如成员是" ParkingHwnd",它返回一个长度为1的数组;它发现没问题。那是为什么?

        var hostType = host.GetType();
        var members = host.GetType()
            .GetMember(member, Public | NonPublic | Instance);

1 个答案:

答案 0 :(得分:3)

我刚做了一些实验。根据文档,您需要指定BindingFlags.DeclaredOnly以排除继承的成员,但在我的测试中,我发现我无法让继承的成员出现在GetMember的返回值中,{{1 }或GetFields

使用默认的WPF应用程序时,GetField不是Application.Current的直接实例,而是Application中定义的Application的子类。我发现,如果我使用App.xaml,则可以发现host.GetType().BaseType等字段。

因此,为了一般性地查找_ownDispatcherStarted基类声明的字段,您可能需要在Application之后重复遍历继承树,直到找到您要查找的成员为止或打到根。

这不是我预期的结果,但希望它会让你前进。 : - )