我正在对遗留系统进行维护,并在.Net类中找到以下实现(GetMethod
只是一个硬编码示例。这来自config xml文件)。我已将其更改为正常的方法调用,以查看它是否可行并执行:
GetMethod = "ListChanges";
DataSet dsData = null;
Type currType = GetType();
dsData = currType.InvokeMember(GetMethod,
BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
null,
this,
new object[] {oWS}) as DataSet;
VS
DataSet dData = ListChanges(<Some class> var); //ListChanges defined in the class!!
我已经读过InvokeMember
提供了某些绑定约束,但是看看这是什么我无法理解为什么这会改进代码而不是正常的方法调用?
答案 0 :(得分:0)
这是没有接口的相同方法名称模式的情况。您有多个编译器生成的类(来自Typed DataSet等),
class A {
public Changes ListChanges(Object a){
...
}
}
class B {
public Changes ListChanges(Object a){
...
}
}
A类和B类具有相同的方法签名,方法名称为&#34; ListChanges&#34;但两者都没有实现接口。
开发人员可能已经通过使用反射来有效地调用方法,假设您可以轻松地使用此方法而不必担心类型。
通常我们会定义partial
类并为生成的类添加接口,但可能这段代码很旧(类型化数据集很旧),partial
在开发和编写时不存在自定义代码生成器对于简单地调用单个方法的代码来说太过分了。