有没有办法动态调用一个类里的方法

Imcx 2015-07-15 02:27:06
我在项目里创建了一个文件夹,文件夹里放了若干个类文件(都是继承的一个基类),它们分别代表了一个供应商,我想要获得供应商的信息。

我使用comboBox来选择供应商后点击按钮就会调用GetParam()用来获得请求参数,最后发送给对应的供应商获得信息。
因为请求每个供应商的参数都不一样(有的用xml,有的用json还有的直接是url格式的),所以我想在各自的类中写参数创建方法

现在的问题是我用comboBox选择供应商了,但是怎么去调用它


是不是要改成写到一个类库里然后用反射什么的?不知道可行吗?
...全文
193 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不要纠结一两条看似很新颖的编程语句,那些都可以放到“后话”中去写。重要地是搞明白这到底是什么设计思想,并从一开始就搭这个架构。如果你花5分钟学会了反射创建一个供应商对象,结果后边的一周的工作全都错了,等一后明白后就该后悔把可以放在“后话”中的东西过早提前了。
  • 打赏
  • 举报
回复
要注意这里的误区: 这里最为关键的,是你调用 GetParam 和 SendMessage 方法时跟反射毫无关系!这是最重要的。如果你调用这2个方法的时候考虑什么反射,那么就彻底偏离了本意了。
  • 打赏
  • 举报
回复
根据名称来选择实例化类型,如果你的类型比较少,你就可以写 switch case 语句。如果扩展为比较多(并且到第二阶段需要动态配置),则可以使用工厂模式来根据配置的文件中写明的 Assembly名称和Type全名来反射。 但是这是后话。在你写主程序时,你就(写一个类似
var abc = Get供应商(comboBox1.SelectedValue);
)获得了一个“基类”的对象,然后调用其 GetParam 和 SendMessage 接口方法就行了。主程序根本不管什么“xml还是url”之类的。 而在最初,这个 “Get供应商”方法直接 return 一个固定的供应商用来测试就行了。之后用 switch case (或者if..else if .....else if.....else 语句)来根据输入的参数调用不同的 return 语句来返回不同子类供应商实例就行了。 把主程序以及业务功能相关的一切调试好(比如用1周时间)之后,抽几分钟时间写上3、4行代码把这几个return语句用一个反射代替,就行了。但是这是后话。
Imcx 2015-07-15
  • 打赏
  • 举报
回复
引用 4 楼 ah597568204 的回复:
Activator.CreateInstance(Type.GetType(sClass));
通过类全名(命名空间+类名)获取该类的实例
我去试试
引用 5 楼 sp1234 的回复:
基类中有 GetParam 和 SendMessage 的接口定义,处理统一的输入数据的格式。至于各个子类如何实现它,那自然是子类事情。这是标准的“接口、继承、多态”的概念,没有一丁点新鲜的事儿,用不着什么反射。 除非你的说法“我在项目里创建了一个文件夹,文件夹里放了若干个类文件(都是继承的一个基类),它们分别代表了一个供应商”本身也是空话、你自己在实现一个设计时就把设计抛弃了。 (面向对象的、接口和继承等等的)技术概念名词儿好说,真正能不能当真,其实要看具体实现的!
多谢指点~
  • 打赏
  • 举报
回复
基类中有 GetParam 和 SendMessage 的接口定义,处理统一的输入数据的格式。至于各个子类如何实现它,那自然是子类事情。这是标准的“接口、继承、多态”的概念,没有一丁点新鲜的事儿,用不着什么反射。 除非你的说法“我在项目里创建了一个文件夹,文件夹里放了若干个类文件(都是继承的一个基类),它们分别代表了一个供应商”本身也是空话、你自己在实现一个设计时就把设计抛弃了。 (面向对象的、接口和继承等等的)技术概念名词儿好说,真正能不能当真,其实要看具体实现的!
O爱咋咋地O 2015-07-15
  • 打赏
  • 举报
回复
Activator.CreateInstance(Type.GetType(sClass));
通过类全名(命名空间+类名)获取该类的实例
exception92 2015-07-15
  • 打赏
  • 举报
回复
可以放到 一个类里,根据传入的供应商信息 发送不同的数据请求。
Imcx 2015-07-15
  • 打赏
  • 举报
回复
引用 1 楼 ah597568204 的回复:
Activator.CreateInstance(Type.GetType(sClass));
这个是在干嘛?
引用 2 楼 duanzi_peng 的回复:
可以放到 一个类里,根据传入的供应商信息 发送不同的数据请求。
我想用comboBox的选择项直接判断出该用哪个供应商,如果按照你的建议是不是要在类里再进行一次判断呢?
O爱咋咋地O 2015-07-15
  • 打赏
  • 举报
回复
Activator.CreateInstance(Type.GetType(sClass));

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧