【发布时间】:2014-03-24 11:15:19
【问题描述】:
假设我通过以下方式获得 MethodInfo:
Assembly assembly = Assembly.Load(assemblyName);
Type type = assembly.GetType(nameSpaceName+"."+className);
MethodInfo mi = type.GetMethod("myMethod", bf); // bf are the binding flags.
但后来我决定更改myMethod 的大小写/名称。
有没有办法:
- 重构以更改字符串中的名称。
- 更改反射调用,使其在不使用方法名称作为字符串的情况下获取方法?
这样做的原因是我可以测试需要使用反射的代码,但我宁愿不要求没有人更改代码中方法的名称。
【问题讨论】:
-
一句话:小心!这实际上完全取决于您使用反射的方式和原因。
myMethod这个名字有什么特别之处?该类是否没有实现接口或类似的东西? -
嗯...我猜 myMethod 的特殊之处在于我知道另一个方法调用它,myMethodCaller。因此,当我测试时,我希望将 myMethod 的调用者视为 myMethodCaller。我想我可以期望不要改变这两种方法......但我不喜欢那样。
-
在您的场景中是否可以让动态加载的程序集中的类型实现接口?这样你就不必通过反射调用方法(但仍然可以有一个插件架构)。
-
@user420667:那么你的调用者是如何调用代码的呢?直接地?如果是这样,你为什么不能这样做?
-
@JS: B/c 测试的重点是显示其他方法,比如 MethodInfo getCaller(MethodInfo mi),有效。
标签: c# reflection refactoring