在.NET中开发组件

自由鱼V

自由鱼V

2016-01-29 12:55

在.NET中开发组件,在.NET中开发组件
本文对“组件”这个术语进行定义并提供特别是与组件编程相关的 .NET 框架编程概念的概述。虽然“组件”这个术语有多种含义,但在 .NET 框架中,组件是指实现 System.ComponentModel.IComponent 接口的一个类,或从实现该接口的类中直接或间接导出的类。如果想要您的组件或控件在其他编程语言中可以使用,您必须以符合公共语言规范 (CLS) 的语言创作它们并确保所有公共和保护的成员都符合 CLS。.NET 框架 SDK 为四种符合 CLS 的语言(Visual Basic .NET、C#、C++ 的托管扩展和 JScript .NET)提供编译器。类、组件和控件本主题对组件和控件进行了定义;此处进行的讨论可以帮助您决定何时实现一个是组件或控件的类。以下列表为实施者提供了全面的指南。 如果类使用外部资源但不用于设计图面,则实现 System.IDisposable,或者从直接或间接实现 IDisposable 的类导出。 如果类用于设计图面(例如 Windows 窗体或 Web 窗体设计器),则实现 System.ComponentModel.IComponent,或者从直接或间接实现 IComponent 的类导出。请注意,IComponent 扩展了 IDisposable,因此 IComponent 类型始终是 IDisposable 类型。与不是 IComponent 的 IDisposable 类型相比,IComponent 类型的性能系统开销要小。但 IDisposable 类型的这一不足通常可由在设计时和运行时安置 IComponent 的能力来弥补。(在本主题的后面部分将对该安置功能进行说明)。 如果需要由引用封送的可设计的(用于设计图面)类,则可从 System.ComponentModel.Component 导出。Component 是由引用封送的 IComponent 类型的基实现。 如果需要由值封送的可设计类,则可从 System.ComponentModel.MarshalByValueComponent 导出。MarshalByValueComponent 是由值封送的 IComponent 类型的基实现。 如果需要在对象模型层次结构中引入 IComponent 类型(由于是单继承,因此不能从像 Component 或 MarshalByValueComponent 这样的基实现导出),则实现 IComponent。 如果需要提供用户界面的可设计类,则该类是控件。控件必须从基控件类(System.Windows.Forms.Control 或 System.Web.UI.Control)之一直接或间接导出。 注意 如果类既不是可设计类又没有外部资源,则不需要 IComponent 或 IDisposable 类型。下面是组件、控件、容器和站点的定义。组件在 .NET 框架中,组件是指实现 System.ComponentModel.IComponent 接口的一个类,或从实现 IComponent 的类中直接或间接导出的类。在编程中,“组件”这个术语通常用于可重复使用并且可以和其他对象进行交互的对象。.NET 框架组件满足这些一般要求,另外还提供诸如控制外部资源和设计时支持等功能。控制外部资源IComponent 接口扩展了 System.IDisposable 接口,在后者的协定中有一个名为 Dispose 的方法。在其 Dispose 方法实现中,组件必须显式释放外部资源。与垃圾回收过程中发生的默认、不确定的清理相比,这提供了一个确定的方法来释放资源。开发人员必须在整个包容层次结构中传播 Dispose 以确保组件的子级也释放资源。另外,导出的组件必须调用其基类的 Dispose 方法。注意 即使通过 Dispose 提供对资源的显式控制,您也应该始终通过终结器(析构函数)提供隐式清理以防止资源的永久泄漏(如果某个用户未能在您的组件上调用 Dispose 可能会出现这种情况)。下面的示例显示了在基组件和在导出的组件中实现 Dispose 的方式。[C#]public class BaseComponent : IComponent { // IComponent extends IDisposable. public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { //Free other state (managed objects). } //Free your own state (unmanaged objects). } //Simply call Dispose(false). ~BaseComponent(){ Dispose (false); }} //Derived component.public class DerivedComponent : BaseComponent { protected override void Dispose(bool disposing) { if (disposing) { // Free other state. } // You must invoke the Dispose method of the base class. base.Dispose(disposing); //Free your own state. ... } //No finalizer/destructor. //No Dispose() method.}设计时支持在 .NET 框架中,组件的一个重要功能就是它们是可设计的,这意味着作为组件的类可用于快速应用程序开发 (RAD) 环境(如 Visual Studio .NET)中。可将组件添加到 Visual Studio .NET 的工具箱中,也可将组件拖放到某个窗体上,还可以在设计图面上对组件进行操作。请注意,对 IComponent 类型的基本设计时支持已经内置于 .NET 框架中;组件开发人员无须进行额外的工作就可利用基本设计时功能。承载组件组件可以被放置(承载)在一个容器(本主题稍后部分进行了定义)中。当组件被放置后,它通过其站点(本主题稍后部分进行了定义)与容器进行交互并能够通过站点从其容器查询并得到服务。为了确保容器拆卸后资源被释放,容器必须实现 IDisposabl
展开更多 50%)
分享

猜你喜欢

在.NET中开发组件

电脑网络
在.NET中开发组件

在VB中利用Word宏命令开发ASP组件

ASP
在VB中利用Word宏命令开发ASP组件

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

.NET中的动态生成图像组件

vb
.NET中的动态生成图像组件

在ASP中利用COM组件开发Web应用程序

ASP
在ASP中利用COM组件开发Web应用程序

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

消息队列在VB.NET数据库开发中的应用

vb
消息队列在VB.NET数据库开发中的应用

在asp中结合对象和组件

ASP
在asp中结合对象和组件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

图片放大缩小移动类

图片放大缩小移动类

用Flash 绘制世界杯会标

用Flash 绘制世界杯会标
下拉加载更多内容 ↓