如何通过反射实现动态功能模块加载

简介: 原文:如何通过反射实现动态功能模块加载  程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。
原文: 如何通过反射实现动态功能模块加载

  程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

  下面我们将介绍如何通过不使用反射的方式和使用反射的方式加载功能模块。实现效果:

 

1.        WinForm 主程序

主程序我们使用Winform程序,VS2008 工具C#语言开发。包括工具栏、状态栏及TabControl控件。我们使用TabControl 作为功能模块容器,装载各个功能模块。实现效果如下:

 

2.        不使用反射方式加载功能

新增信息资料功能模块项目,项目增加资料管理(UCCustomerInfo)用户控件。资料管理显示、加载、导入、导出资料功能。

 

2.1.       WinForm 主程序调用

WinForm 添加资料管理项目引用。点击信息资料时,实例资料管理功能模块进行加载。

 

3.        使用反射方式加载功能

使用反射方式加载功能,需要定义功能模块接口、设计配置功能模块、主程序读取配置文件动态加载功能模块。

3.1.       定义功能模块接口

功能模块接口(UCModule)定义为用户控件(UserControl),虚拟两方法,供具体功能模块进行重写。

 

3.2.       实现功能模块实例

功能模块还是前信息资料管理功能,但不是继承用户控件(UserControl),而是继承功能模块接口(UCModule)。

 

3.3.       设计功能模块配置

功能模块配置采用Xml文件定义,定义为:模块编号、模块名称、模块项目、模块对象。

 

3.4.       通过配置动态功能模块

读取功能模块配置,返回系统定义的功能模块列表。增加工具栏按钮,点击工具栏按钮时,加载配置的功能模块项目。

 

 

至此,如何通过反射动态加载功能模块已讲解完毕。从两示例实现的方式,我们可明显看出,采用动态加载的方式,比直接使用的方式还是要复杂得多,所以小型项目、团队成员不多的情况下,还是建议不使用反射比较好。

目录
相关文章
|
1月前
|
编译器 C++
【C++】—— c++11新的类功能
【C++】—— c++11新的类功能
|
7月前
|
Java
Java反射机制动态操作
Java反射机制动态操作
37 0
|
3月前
|
监控 安全 Java
Java反射:深入了解动态类操作
Java反射:深入了解动态类操作
68 0
|
7月前
|
Oracle 架构师 关系型数据库
C#反射应用之实现动态可配置可扩展框架的简单示例
C#反射应用之实现动态可配置可扩展框架的简单示例
配置静态和动态
介绍: 静态nat 和 动态nat 的配置 静态nat 配置步骤 第一步 配置接口地址 第二步 配置静态地址转换 ip nat inside source static 内部私有地址 转换之后的公网地址 动态nat 配置步骤 第一步 配置接口地址 第二步 配置标准acl 指定需要转换的多个内部主机地址 access-list 编号 permit 网段地址 子网掩码反码 第三步 配置 转换后的公网地址地址池 ip nat pool 地址池名字 起始地址 结束地址 子网掩码 第四步 配置动态地址
118 0
|
缓存
读源码长知识 | 动态扩展类并绑定生命周期的新方式
在阅读viewModelScope源码时,发现了一种新的方式。 协程需隶属于某 CoroutineScope ,以实现structured-concurrency,而 CoroutineScope 应
136 0
(十八) 反射的原理是什么,反射创建类实例的三种方式是什么?
javac在这一阶段会把java代码编译为class文件,保存在硬盘中,这个文件中保存着这个类的类名、成员名、构造方法、其他方法等。
|
图形学 Go
NavMesh系统动态碰撞的探讨
  Unity3D提供的NavMesh系统可以方便的解决游戏的寻路问题,但是该系统有一个比较让人不理解的问题:   NavMesh导航时会忽略Physics系统本身的碰撞,也就是说NavMeshAgent在移动的过程中不会被Collider阻挡,而是会直接走过去(但是OnTriggerEnter等触发功能正常)。
2459 0