jit*_*itm 8 .net c# reflection
我有这样的情况,我必须使用反射调用接口的方法,像这样
object x = null;
MethodInfo method = interfaceExists.GetMethod("ShutDown");
method.Invoke(x, new object[] { 4 })
Run Code Online (Sandbox Code Playgroud)
如你所见,我不创建对象的实例!而且,正如我所想,我得到例外
非静态方法需要目标
问题,我可以在不创建界面实例的情况下使用反射调用界面方法,如果是,我该怎么做?
Dan*_*ant 13
如果您完全确定接口方法不会影响对象状态(这通常是一个非常糟糕的假设),您可以通过调用FormatterServices.GetUnitializedObject来创建实例而无需调用构造函数.就个人而言,我强烈建议不要这样做,因为当您在未初始化类型上调用接口方法时,可能会发生任何数量的错误.
小智 10
如果它是实例方法,则需要一个用于调用该方法的实例.因此"实例"方法.
实例方法可以依赖于实例变量,反射不会知道,因此它不能保证实例方法不会改变定义它的类型实例的状态.
这就是为什么你会得到那些FxCop警告(在这里解释)"使这个方法静态,因为它不会改变类的状态".