在C#/ Silverlight应用程序中使用反射访问私有方法

时间:2011-09-01 22:07:20

标签: c# silverlight reflection

我的代码使用反射调用方法:

        scoringType.InvokeMember("scoringClient_ScorePostsCompleted",
            BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
            null, scoringInstance,
            new object[] { sArg, eArg });

其中scoringInstance是ModelView类的实例。该方法是私有的,但我使用BindingFlags.NonPublic,所以,我应该能够访问它,但我不能 - 我得到MethodAccessException异常:“尝试方法...访问方法...失败。” 谷歌似乎没有答案。你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:11)

来自silverlight上的MSDN

  

在Silverlight中,您无法使用反射来访问私有类型和   成员。如果类型或成员的访问级别会阻止您   从静态编译的代码中访问它,您无法访问它   动态地使用反射。

编辑:

Silverlight 5现在只允许私有成员的反映,如果你在浏览器外或浏览器中使用提升的权限运行(在浏览器中使用生成的测试页面不工作)。

答案 1 :(得分:2)

如果您需要访问非公开成员,可以使用 LambdaExpression 执行此操作。 我写了这个article,详细解释了它的工作原理。