C#如何利用反射机制调用带参数的画面?

小欠登 2018-06-25 01:58:22
在数据库中查询功能菜单需要调用的Form窗体的名称,利用反射机制进行自动跳转,
主画面按钮事件:
button1_Click
//如果自画面无参数,反射成功,带参数就会报错。
string NameSpace = "Form1";
string ClassName = "Win.Form1";//全路径。
Assembly asm = Assembly.Load(NameSpace);
Form frm = (Form)asm.CreateInstance(ClassName);
frm.ShowDialog();
子画面及参数定义:
public Form1(string 名称,string 其他);
public Form2(string 名称,string 其他);
public Form3(string 名称,string 其他)
请高手指点下该如何将参数船体给子画面
...全文
264 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
小欠登 2018-06-25
  • 打赏
  • 举报
回复
真是感谢了,我按照你的思路研究下
  • 打赏
  • 举报
回复
你自己写了 Win.Form1 之类的代码,那么我就要告诉你,像一个架构设计师一样去设计产品规范,展示工厂模式动态反射机制,这个时候你需要对业务领域的 Form 定义自己的接口(或者是 Abstract 类),而不是一味地 Invoke 反射代码。
  • 打赏
  • 举报
回复
一定要反射的话,就需要调用类型对象的 GetMethod 方法,找到你要查找的方法的 methodInfo 对象实例,然后调用其 Invoke 方法,提供调用参数(object[ ])。


不过要清楚的是,你看任何一个主流的的工程该怎么设计系统。走偏门毕竟只是偶尔、无奈之举。软件说到底就是 0、1、0、1 一堆二进制,那么你可以说会一点二进制概念也能“万能地”调用任何 DLL。但是要工程化,去讲究设计开发效率的人,才是真正有用的工程师,而不是纠结与底层代码出不来的。
小欠登 2018-06-25
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说你认为针对一个 object 应该调用其”喂饭“接口方法,并且输入输出的模式已经清楚了,那么请问你凭什么?

凭的是接口定义。所以那些空洞地说反射的人是不行的。真正的使用反射的工厂模式程序,要基于接口编程。而不是空洞地搞什么”万能“代码。

public partial class 实时报警 : Form
{
public string 报警类型Z = "";
public string 报警名称Z = "";
public string sddf = "";
public 实时报警(string 报警类型,string 报警名称)
{
InitializeComponent();
报警类型Z = 报警类型;
报警名称Z = 报警名称;
}
}
小欠登 2018-06-25
  • 打赏
  • 举报
回复
求助啊,大神都去哪了!!!!!!!
小欠登 2018-06-25
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
比如说你认为针对一个 object 应该调用其”喂饭“接口方法,并且输入输出的模式已经清楚了,那么请问你凭什么?

凭的是接口定义。所以那些空洞地说反射的人是不行的。真正的使用反射的工厂模式程序,要基于接口编程。而不是空洞地搞什么”万能“代码。



起始我就是想利用下面的简单代码去调用一个带参数的画面,比如跳转“实时报警”这个画面时,需要向这个窗体传两个string类型的参数,不知道怎么弄。
string NameSpace = "WinAlert";
string ClassName = "WinAlert.实时报警";
Assembly asm = Assembly.Load(NameSpace);
Form frm = (Form)asm.CreateInstance(ClassName);
frm.ShowDialog();
  • 打赏
  • 举报
回复
比如说你认为针对一个 object 应该调用其”喂饭“接口方法,并且输入输出的模式已经清楚了,那么请问你凭什么?

凭的是接口定义。所以那些空洞地说反射的人是不行的。真正的使用反射的工厂模式程序,要基于接口编程。而不是空洞地搞什么”万能“代码。
  • 打赏
  • 举报
回复
你的窗体是什么业务领域的窗体,你应该设计并发布出来接口。最终,这应该是
MyForm frm = (MyForm)asm.CreateInstance(ClassName);
这种业务规范对象,而不是什么 Form。

过度抽象的人不懂抽象。真正懂抽象的人是基于落地了的具体的内涵(也就是接口规范)来设计开发的。不是什么都动不动说“反射”。
小欠登 2018-06-25
  • 打赏
  • 举报
回复
不要沉底啊!!!!!!!!!!!

110,534

社区成员

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

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

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