c#反射得到子控件类型

菜鸡小王子 2017-11-26 10:00:22
我有个父类控件BaseControl,有多个子类控件继承父类,比如AddControl,SubControl等,运行时
有个集合List<BaseControl>,需求是将运行时的程序保存为json文件,所以我需要得到运行时所有已经动态创建的子类类型,保存在json文件里面,后面打开再动态加载重新生成子类实例。看了很多反射的知识,还是没有找到办法,各位大佬求助呀?谢谢啦
...全文
674 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2017-11-27
  • 打赏
  • 举报
回复
不需要反射,直接调用 GetType() 就可以了。
圣殿骑士18 2017-11-27
  • 打赏
  • 举报
回复
winform or wpf?
菜鸡小王子 2017-11-27
  • 打赏
  • 举报
回复
引用 1 楼 daixf_csdn 的回复:
winform or wpf?
窗体程序,现在具体子类型可以获取,但是我想的是以什么用的格式在json中保存,后面再恢复
菜鸡小王子 2017-11-27
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
你说的那种功能,需要仔细设计接口,并且只支持实现了接口的“子控件”。如果说你想做一个“万能的”程序恢复功能,而且还能恢复控件集合的状态,我可以告诉你,连微软集四几十年的 UI 设计经验都做不到,控件运行状态内部非常复杂、不可恢复,你很可能会浪费几年时间。
谢谢~~我想的是将状态保存在json文档里面,后面再进行恢复,只是不知道子类型以什么样的格式进行保存
菜鸡小王子 2017-11-27
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
不需要反射,直接调用 GetType() 就可以了。
通过调用GetType()得到具体的子类型后,我需要重新创建实例,比如:

Type type = meterControl.GetType(); //得到具体子类型
BaseControl newMeterControl = (BaseControl)Activator.CreateInstance(type, true) //创建子类型实例(调用的是默认函数)
得到的newMeterControl 的确是子类型,但是我需要将这个子类型存入json文档,然后根据这个类型进行解析生成子类型实例(调用的构造函数不是默认,自定义的那种), 大佬有木有什么想法?
  • 打赏
  • 举报
回复
你说的那种功能,需要仔细设计接口,并且只支持实现了接口的“子控件”。如果说你想做一个“万能的”程序恢复功能,而且还能恢复控件集合的状态,我可以告诉你,连微软集四几十年的 UI 设计经验都做不到,控件运行状态内部非常复杂、不可恢复,你很可能会浪费几年时间。
  • 打赏
  • 举报
回复
一个好的设计,它应该按照接口编程,千万不要随便反射。比如说你有“创建数据集合”的任务,那么数据接口本身应该有这个功能,而不是弄什么反射。反射是不得已时的做法,感觉没有接口、无能无助时才不得反射,切不可为了“高大上”就牺牲几百倍性能去反射。
  • 打赏
  • 举报
回复
引用 楼主 qq_35181209 的回复:
需求是将运行时的程序保存为json文件,
需求太大了不好,劳民伤财。你可能要花几年时间去浪费老板的钱财,才能明白该放弃什么该注重什么。

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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