我的代码使用反射调用方法:
scoringType.InvokeMember("scoringClient_ScorePostsCompleted",
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
null, scoringInstance,
new object[] { sArg, eArg });
,其中scoringInstance是一个ModelView类的实例。该方法是私有的,但我使用了BindingFlags。NonPublic,所以,我应该能够访问它,但我不能-我得到MethodAccessException异常:"尝试通过方法…访问方法…失败了。"谷歌似乎没有答案。你知道怎么修理它吗?
From MSDN on silverlight
编辑:在Silverlight中,你不能使用反射来访问私有类型和成员。如果类型或成员的访问级别阻止在静态编译代码中访问它时,无法访问它动态地使用反射。
Silverlight 5现在允许私有成员的反射,只有当你在浏览器外或浏览器内以更高的权限运行时(在浏览器内使用生成的测试页面不工作)。
如果需要访问非公共成员,可以使用LambdaExpression来实现。我写了这篇文章,详细解释了它的工作原理。