首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvokeMember与普通方法调用

InvokeMember与普通方法调用
EN

Stack Overflow用户
提问于 2017-08-08 15:40:57
回答 1查看 171关注 0票数 0

我正在对一个遗留系统进行维护,并在一个.Net类中发现了以下实现(GetMethod只是一个硬编码的例子。这来自配置xml文件)。我已经将它更改为正常的方法调用,以查看它是否可以工作,并做到了:

代码语言:javascript
复制
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

代码语言:javascript
复制
DataSet dData = ListChanges(<Some class> var); //ListChanges defined in the class!!

我读到过InvokeMember提供了某些绑定约束,但是看着这个,我不明白为什么这会改进代码而不是普通的方法调用?

EN

回答 1

Stack Overflow用户

发布于 2017-08-08 16:09:16

这是没有接口的相同方法名称模式的情况。你有多个编译器生成的类(从类型化的DataSets等),

代码语言:javascript
复制
class A {
    public Changes ListChanges(Object a){
      ...
    }
}

class B {
    public Changes ListChanges(Object a){
      ...
    }
}

类A和类B都有相同的方法签名,方法名为"ListChanges“,但都不实现接口。

开发人员这样做可能是为了通过使用反射来高效地调用方法,假设您可以轻松地使用此方法,而不必担心类型。

通常我们会定义partial类并将接口添加到生成的类中,但是这些代码可能非常旧(类型化数据集非常旧),partial在开发时并不存在,编写自定义代码生成器对于简单地调用单个方法来说太多了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45562174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档