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

本文关键字:反射 访问 有方法 Silverlight 应用程序 | 更新日期: 2023-09-27 18:07:21

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

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

,其中scoringInstance是一个ModelView类的实例。该方法是私有的,但我使用了BindingFlags。NonPublic,所以,我应该能够访问它,但我不能-我得到MethodAccessException异常:"尝试通过方法…访问方法…失败了。"谷歌似乎没有答案。你知道怎么修理它吗?

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

From MSDN on silverlight

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

编辑:

Silverlight 5现在允许私有成员的反射,只有当你在浏览器外或浏览器内以更高的权限运行时(在浏览器内使用生成的测试页面不工作)。

如果需要访问非公共成员,可以使用LambdaExpression来实现。我写了这篇文章,详细解释了它的工作原理。