动态组件插拔

在实现动态组件插拔之前,我们必须了解一个概念:反射(Reflection)。

所谓反射,就是仅依据名字来创建一个对象

举个例子,在上面的例子中,我可以直接给定一个字串:“ CSharpClassNameSpace.CSharpRect”,然后我就可以生成这个对象,并调用它的Area()方法求面积!其前提条件是程序能访问存放这些类的DLL文件。

好了,现在可以说说我们的构想了:

我们把某个程序要用到的DLL和其中的类名放在一个配置文件中,程序启动时读取这个文件,就可以自动地加载外部指定的DLL,实现程序的组件动态装配。当我需要更换程序中的某个组件时,我只需要将新DLL复制到程序文件夹之下,系统就马上可以使用新的组件,而不用重新编译或修改组件调用者原有的任何代码!

现在看看我们的示例是怎么样的!

我们创建两个VB类库,每个类库都封装了一个窗体。VBDynamicComponent组件中封装了以下窗体:

图 6 组件一

VBDynamicComponent2组件中封装了以下窗体:

图 7 组件二

主程序是一个Windows应用程序,它可以动态创建两个组件中的任何一个窗体对象,并显示它们:

图 8 示例程序主窗体

主程序在启动时会读取一个系统配置清单,是XML格式的,如下所示:

  <?xml version="1.0" encoding="GB2312" ?>

<Config>

     <Component ComponentName=" DynamicComponent.VBForm1"   ComponentFileName="DynamicComponent.dll" />

     <Component ComponentName="VBDynamicComponent2.VBForm2" ComponentFileName="VBDynamicComponent2.dll" />

</Config>

主程序根据清单装入指定的组件DLL文件,并依据ComponentName属性值创建对象,排列在第一位的组件窗体被自动显示。

大家看一看,这样一个系统组件装配清单,象不象一个厨师准备大餐时的原料清单?现在就开始制作我们的“满汉全席”吧!

作者Blog:http://blog.csdn.net/bitfan/

基于组件的.NET软件开发(3)相关推荐

  1. 基于组件的.NET软件开发(1)

    基于组件的.NET软件开发 前言 随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式.以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导 ...

  2. 基于Andro平台的软件开发若干关键技术研究(笔记)

    基于Android平台的软件开发若干个关键技术研究 摘要:随着移动智能终端的飞速发展和广泛普及,移动GIS应用正迅速迅速成长,并且成为最有发展前景的热点之一.作为移动GIS应用的分支,基于Androi ...

  3. ubuntu14.04如何在线安装eclipse以及C/C++开发组件,搭建软件开发平台

    在ubuntu14.04操作系统中进行C/C++软件开发,需要安装eclipse以及CDT等各种组件,下载安装包一一安装,之后再进行各种配置可能比较麻烦,在这里推荐一种在线安装方式,安装配置较为方便. ...

  4. 基于Qt的待办软件开发

    大一的时候,由于各种作业.事情太多,笔者迫切希望找一个好用的待办软件,但是一直没有找到合适的.于是一冲动,索性决定自己给自己写一个. 之后这一年多,笔者不想玩游戏了就会写一写这个项目,如今算是达成了阶 ...

  5. 基于QT框架的软件开发

    QT入门科普 初识QT 更新到QT6: QT的许可类型 QT与C++ QT美与丑 技术选型偏重 未来发展趋势 个人发展路线 初识QT Qt 是一个1991年由Qt Company开发的跨平台C++图形 ...

  6. 基于QML的 客户端软件开发流程

    一,背景 Qt Quick 作为Qt公司对移动端的一种尝试,无疑是失败的.生态的缺失,支持的不利,基本上看不到移动端有人用这套东西来开发应用,但是这套技术本身是不错的,快速的开发效率,gpu式的渲染方 ...

  7. 基于Android平台im软件开发,基于Android平台IM软件多媒体数据传输保护

    Protection for Instant Messanger Media data Transmission Based-on Android WU Weina 1 吴维娜(1992- ),女,北 ...

  8. 大型CAx(CAD/CAE/CAM)工业软件开发中的关键组件

    通过对FreeCAD.SALOME等多款代码的分析研究,发现这些软件在架构设计.模块实现等方面,存在许多相似(同)的技术思想.因此,有必要对这些共性.主流的技术予以总结分析. Structuring ...

  9. 基于AUTOSAR规范的电机控制器软件开发

    基于AUTOSAR规范的电机控制器软件开发 本系列文章主要介绍如何开发符合AUTOSAR规范的电机控制器软件的详细过程. 全系类分为基础篇和实战篇:基础篇内简要介绍最新的AUTOSAR规范,嵌入式软件 ...

最新文章

  1. linux c 内存共享
  2. Redis数据库(一)——介绍、配置与优化
  3. 初探Golang(3)-数据类型
  4. HTTP协议中你必须知道的三种数据格式
  5. tensorflow:图(Graph)的核心数据结构与通用函数(Utility function)
  6. 骆天涯:gunicorn部署Flask服务
  7. 3个好用的3D点云数据标注工具推荐
  8. Python技巧:双击python文件打开.py(博主自测完整版)
  9. 你一定要狠狠的幸福,那个凶丫头(2)
  10. 土方回填施工方案范本_联投土方回填施工方案样本
  11. 基本农田卫星地图查询_谷歌地图打不开?试试这个替代网站,街景功能很好用!...
  12. ORA-20001: Latest xml inventory is not loaded into table
  13. CAPM模型通俗透彻理解(资本资产定价模型)
  14. 微信保存图片查看与清理工具
  15. TensorFlow学习笔记(二)把数字标签转化成onehot标签
  16. Docker容器引擎
  17. css3如何实现动画效果
  18. 对 捕鱼达人1.01 的全程破解分析
  19. 《老梁四大名著情商课》笔记- 别慌,情商是可以提升的
  20. 计算机基础教程张福炎pdf,计算机基础教学大纲(理科).pdf

热门文章

  1. 计算机视觉大规模爆发,6大细分领域将撑起725亿元市场
  2. 在分析了AI顶会上的6163篇论文后,我们能发现怎样的发展趋势与变化……
  3. 5 个被忽视的习惯,决定了你很难成为高级开发工程师!
  4. 硬核!如何全面系统地自学 Java ?(必看)
  5. 36 岁开发者应聘被拒,这 3 位 50 岁程序员的生存秘籍送给你!
  6. 为什么有些高级开发不喜欢 Python?
  7. 大揭秘:程序员工作也可以成为享受!
  8. 拼多多程序员:因为看到同事被抬上救护车,我被开除了!
  9. 校招容易踩雷?这份“避雷针”指南拿走不谢
  10. 使用SSH命令行远程登录运行在CloudFoundry上的应用