我正在对一个遗留系统进行维护,并在一个.Net类中发现了以下实现(GetMethod只是一个硬编码的例子。这来自配置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提供了某些绑定约束,但是看着这个,我不明白为什么这会改进代码而不是普通的方法调用?
发布于 2017-08-08 16:09:16
这是没有接口的相同方法名称模式的情况。你有多个编译器生成的类(从类型化的DataSets等),
class A {
public Changes ListChanges(Object a){
...
}
}
class B {
public Changes ListChanges(Object a){
...
}
}类A和类B都有相同的方法签名,方法名为"ListChanges“,但都不实现接口。
开发人员这样做可能是为了通过使用反射来高效地调用方法,假设您可以轻松地使用此方法,而不必担心类型。
通常我们会定义partial类并将接口添加到生成的类中,但是这些代码可能非常旧(类型化数据集非常旧),partial在开发时并不存在,编写自定义代码生成器对于简单地调用单个方法来说太多了。
https://stackoverflow.com/questions/45562174
复制相似问题