• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
C++Q&A:控件和组件概念浅析
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
C++Q&A:控件和组件概念浅析
软件发布 C++Q&A:控件和组件概念浅析
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 认证考试 >> 系统工程师 >> C++Q&A:控件和组件概念浅析

C++Q&A:控件和组件概念浅析

添加时间: 2007-4-9 2:40:00  作者: 系统工程师认证参考  阅读次数:40   来源: http://www.d9soft.com

       

 
 我正在学习 microsoft .net 框架,不太理解控件和组件之间的差别。我知道这些术语可以互用,但什么时候从 control 派生,什么时候从 component 派生呢?
 好问题!简单说来,控件就是具有用户界面的组件。要说的具体一点,就得回顾早期 windows 的历史根源,当时控件指任何子窗口——按钮、列表框、编辑框或者某个对话框中的静态文本。从概念上讲,这些窗口——控件——类似用来操作收音机或小电器的旋钮和按钮。随着控件数量的增加(组合框、日期时间控件等等),控件逐渐成为子窗口的代名词,无论是用在对话框中还是用在其它种类的主窗口中。没过多久 basic 程序员开始编写他们自己专用的控件,自然而然地人们便想到共享这些控件。共享代码的方法之一是通过磁盘拷贝,但那样显然效率低下。必须要有一种机制使开发者建立的控件能够在其它程序员的应用中轻而易举地插入,这便是vba控件,ole控件,ocx和最后activex 控件的动机。
  这就是控件和组件之间产生混淆之所在。因为为了解决控件的可复用问题,所有这些技术必须首先解决更为一般的组件重用问题。(com,如果你还记得它的话,意思是组件对象模型)。在软件行话中,组件这个术语指任何可复用的对象或任何可与其它对象交互的代码体。子程序的发明,曾经一度成为程序员趋之若鹜的软件工程圣杯:一种统一的编程理论,它使程序员从基本构建块——也就是用所选语言编写的各种组件建立大型系统。从子程序演变到oop,到dlls,再到com,再到.net框架的每一种新的编程范例都代表了一种不同的提供可重用性的方案。vbx使用dlls的固化名称。com使用接口和iunknown。.net框架使用 微软 的中间语言(msil)层和公共语言运行时(clr)来提供统一的粘合。
  因此,控件是组件的一个主要样本(并且历史上曾驱动着组件的开发),控件又不仅仅是唯一的一种组件。组件不需要显示任何信息或用户界面。组件可能实现科学计算,收集性能数据,计算1971年1月1日到现在的毫秒数,仰或是读取布什总统竞选活动 保险 箱里的美金数。figure 4 显示了 visual studio .net 中的非控件组件例子。

figure 4 组件

  在 .net 框架中,术语控件和组件为 .net 赋予了专门的意义。component 类为被用于设计层面的对象如 windows forms designer (windows 窗体设计器)或 web forms designer (web 窗体设计器)提供了基本实现。某个 component 是任何可以被拽到某个窗体的任何东西。component 类实现icomponent,isite 和 icontainer。这些接口比起其来自 ole 时期的 com 堂兄弟要简单得多。 icontainer 比起带有 add/remove 方法的组件列表以及组件属性来要稍微复杂一点,它获得的组件是一个 componentcollection (组件集合)

  icomponent 从 idisposable 派生而来,并且只有一个属性,site,获取组件的isite接口。component 可能有,也可能没有site。isite 有四个属性,其中包括name和designmode,它控制该组件是否处于——还能是什么?——设计模式。isite 派生于另一个接口,iserviceprovider,它只有一个方法,getservice。在com中,iserviceprovider 类似 queryinterface——用它可以通过id来查询某个对象的接口,但是与 queryinterface 不同的是该对象本身不用去实现这个接口,它仅仅知道在哪里和如何获取它即可。同样,在.net框架中,iserviceprovider 是一种获取其它接口或对象的通用方法——服务——对象不用实现它就知道的一种服务。
  .net框架使得编写可复用组件轻松自如,不再需要 idl,不再需要类型定义语言,不再需要费力的设计时支持。通过反射(reflection)的魔法,clr 从代码本身就已经知道了该知道的一切,所有的类都在掌控之中。为了添加设计时支持,你只要用额外的设计器标记你的属性即可。例如,在托管c++中:
// in cmycontrol
[category(s"appearance")]
[description(s"specifies widget foreground color.")]
_property color get_forecolor() { ... }
_property void set_forecolor(color value) { ... }  现在窗体设计器在“外观”(appearance)中列出你的 forecolor 属性并使用帮助描述(description)。有关设计时属性的更多内容,请参考.net框架文档中的“组件的设计时属性”

figure 5 类层次结构

  figure 5 显示了.net框架中的类层次结构,它能说明上述讨论的问题。正如你所看到的,control 从component 派生而来。这是用另外一种方式来说明控件即组件(反之则不然)。更具体地讲,控件是一个用用户界面的组件——能绘制东西并能与用户交互。control 类还是所有托管窗口类的基类——窗体、按钮、栅格、面板、工具栏等等。control 类是定义 wndproc 和 clientsize 以及所有标准窗口事件如 gotfocus 和 click 的地方。web控件(system.web.ui.control)也是组件,不过从严格的意义上讲,它不是从 system.componentmodel.component 派生的。(对于 web 控件,其名字空间为 system.web.ui,control 本身实现 icomponent。)
  除了实现 icomponent 之外,system.componentmodel.component 还提供了所有组件需要的列集支持,但它是通过从 marshalbyrefobject 派生来实现的。如果想生成一个值列集组件,可以从 marshalbyvaluecomponent 派生(它实现了 icomponent,idisposable 和 iserviceprovider)。system.data.datacolumn,dataset 和 datatable 都是是值列集组件的例子。这些对象跨机器/进程边界传递其实际数据。
  如果你正在编写其他人也能用窗体设计器拖拽到其窗体的可重用的小组件,那么你必须从 component 派生。如果你的小组件还具备用户界面——能创建窗口,绘画或与用户交互——那么就应该从 control 派生。明白了吗?

 

上下文章:

 

上一篇文章: C++Q&A:性能监视 下一篇文章: C++Q&A:性能优化

相关文章:

  • Oracle中的OOP概念
  • 如何学习Oracle?分清几个概念是关键
  • oracle基本概念的学习笔记
  • 浅析防火墙与路由器的安全配置
  • 从概念走向应用的在线杀毒方案

相关软件:

  • ibqsImage 图像处理组件 V2.4
  • iImgReSize图片处理组件 V3.0
  • wfGifAnimator 动画GIF组件 V2.0
  • eptoxls Excel报表图表生成组件 V2.0
  • PB扩展组件 V1.1
  • Grove[.NET组件开发包] V1.2.1640

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

认证考试分类导航

  • 微软认证
  • 计算机等级考试
  • 软件水平考试
  • 思科认证
  • Oracle认证
  • Linux认证
  • JAVA认证
  • 网络工程师
  • 系统工程师
  • 程序员

本类经典文章推荐

  • SQLServer的安全检查
  • 系统设计师资格与水平考纲 (原高级...
  • 系统分析员备考之ISO9000系列基础...
  • 开发数据库的WEB查询
  • 在builder中向Excel传递数据
  • 用Powerbuilder开发WEB数据库
  • PowerBuilder制作IE风格的图标按钮
  • PowerBuilder编程技巧四则
  • 小议数据库主键选取策略
  • 跨数据库文献检索统一平台的实现

系统工程师阅读排行

  • 数据库原理各章节简答题总结
  • 利用C++Builder6.0开发简单的车辆...
  • 跨数据库文献检索统一平台的实现
  • 用Powerbuilder开发WEB数据库
  • 系统设计师资格与水平考纲 (原高级...
  • 项目进度的黑洞——已完成90%
  • 系统分析员备考之ISO9000系列基础...
  • 小议数据库主键选取策略
  • 数据库系统工程师全真预测试卷(一...
  • 2005年上半年数据库系统工程师上午...

认证考试阅读总排行

  • 全国计算机等级考试一级模拟试题01
  • 全国计算机等级考试一级模拟试题10
  • 全国计算机等级考试一级模拟试题08
  • MCSD简介
  • 全国计算机等级考试一级考试最新模...
  • 全国计算机等级考试一级模拟试题07
  • 全国计算机等级考试一级模拟试题02
  • 全国计算机等级考试一级模拟试题06
  • 全国计算机等级考试一级模拟试题03
  • 一级(WINDOWS)试题解析-Word篇

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有