文档详情

第十章基于组件的开发技术.ppt

发布:2018-12-08约1.73万字共59页下载文档
文本预览下载声明
第10章 基于组件的开发技术 10.1 组件和控件 10.2 组件的设计 10.3 用户控件 10.4 自定义控件 10.5 扩展控件 “基于组件编程有很多优势:代码重用,团队支持,多语言开发和独立更新。在90年代,COM是微软流行的基于组件开发的模型。.NET代替了COM,提供了一个全新的模型:语言独立的,注册自由,版本明确的。。。。” 本章概要 日常开发中,经常需要创建一些可以重用的控件。本章介绍如何开发组件和Windows窗体控件的技术,主要介绍组件和控件的创建、在组件中使用事件、扩展已有组件、从Control类继承创建新控件和为控件添加设计时的功能等。 纲要 基本概念 在组件中使用事件 开发Windows窗体控件 基本概念 组件的概念 实现了接口System.ComponentModel.IComponent的类,或者是从System.ComponentModel.Component类以及其他实现了IComponent接口的类得到的派生类。 可以被重用,也可以和其他对象进行交互。 也可以使用结构来实现组件,但是结构不能用来派生新类,通常使用类来实现组件。 组件的使用 通常都要包含在一个命名空间中,在创建组件时需要使用Namespace语句为组件声明相应的命名空间。 组件实质是类,可以实现继承的方法和属性,也可以添加自己的方法、属性和事件等 实际编程中,通常使用属性来代替公共字段。因为在VS.NET的可视化设计器中会显示组件的属性,而不显示组件字段。 使用属性可以在访问时进行验证或执行一些复杂的操作,要比字段来得灵活。 开发组件要注意组件的创建和销毁。 构造函数和析构函数 析构函数的调用时间不确定,可能会造成组件使用完成与析构函数调用之间有延迟,因此,要同时在组件中实现Dispose方法,以便通过它来明确释放组件占用的资源。 组件示例 using System; … Namespace MyNamespace { //定义组件类 public class MyComponent:System.ComponentModel.Component { private int m_myProperty; //声明字段 public MyComponent() {…} public int Myproperty //声明属性 { get { … } set { … } } protected override void Dispose( bool disposing ) { if(disposing) { … } base.Dispose(disposing); //必须调用基类的Dispose方法 //释放资源 … } } } Component类的Dispose方法 public void Dispose() Protected virtual Dispose( bool disposing ) 在组件直接或间接从Component类派生时,使用自定义方法覆盖基类的带参Dispose方法即可,但一定要在方法中实现调用基类的Dispose方法。 如果通过IDisposable接口来创建组件,需要自定义Dispose方法。 容器Container 实现了System.ComponentModel.IContainer接口的类,或者是从实现了这个接口的类得到的派生类。 一个容器可以包含一个或多个组件,这些组件称为容器的子组件。 站点Site 实现了System.ComponentModel.ISite接口的类。或是由实现了这个接口的类得到的派生类。 由容器提供,以管理它所包含的子站点并与子站点通信。 子组件通过站点与容器进行交互。 容器和站点通常是作为整体来实现。 控件 具有用户界面的组件。 Windows窗体控件 从现有控件类派生的控件 从UserControl类派生的控件 从Control类派生的控件 组件通常以.DLL形式文件打包成程序集。其中包含了使用组件需要的所有信息,因此不需要再使用其他文件。 使用模板创建组件,其自动配置项目属性可以生成DLL文件。 在组件中使用事件 触发事件的对象称作发送者,捕获并响应事件的对象称为接收者。事件是组件同客户进行通信的有效手段。 委托 事件通信中,事件的发送者不知道其接收者,我们需要一个媒介来连接发送者和接收者。这个媒介就是委托。 委托是一个类,用于绑定和引用方法。它具有签名,只能绑定匹配参数格式一致的方法。 public delegate void AlarmEventHandler( object sender, AlarmEventArg
显示全部
相似文档