在.NET中开发组件

2016-01-29 12:55 1 1 收藏

在.NET中开发组件,在.NET中开发组件

【 tulaoshi.com - ASP.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

来源:https://www.tulaoshi.com/n/20160129/1488079.html

延伸阅读
标签: ASP
    在我们实际运用中,加密是保证数据安全的重要手段。以前使用ASP时,对数据加密可以使用MD5和SHA1算法,这两种算法虽然快捷有效,但是无法对通过它们加密的密文进行反运算,即是解密。因此需要解密数据的场合,这两种方法就不太适合了。当然你也可以自己编写适用的加密和解密程序,不过这对编写者的数学水平有很高的要求,一...
这里只介绍XMLBuddy,它主要提供是有关DTD方面的验证、代码助手等功能;还有一种是XMLBuddy Pro,它相对于XMLBuddy来说,扩展了许多功能,比如对Schema、XSLT、RELAX NG 的支持,但它需要Money。对于XML的一般编写,XMLBuddy已经够用了,而且它是免费的,很轻易得到,所以这里就着重谈谈它了。 一、下载与安装 1. 下载...
标签: 电脑入门
首先,下载网友从Vista中分离出的Windows日历 下载后,将其解压到Program FilesWindows Calendar文件夹中,右键单击可执行程序文件名WinCal,选择锁定到任务栏或附到开始菜单即可。 压缩包内文件夹说明: zh-CN--日历组件的简体中文语言包 en-US--英文语言包 Windows日历主界面 Windows日历组件默认使用简体中文界面,如需英文,将zh...
标签: Web开发
利用ajax组件怎样能让它跟server控件交互呢,例如输出一个列表,就只有用js一条一条html的输出吗?当然不是,现在可以与datagrid交互。 注:ajax的.net组件可以到此网下载,本文用的是for .net 1.1版本的。http://ajax.schwarz-interactive.de/ 1. 在引用中添加引用Ajax.dll。(这个很废话) 2.在web.config中建立HttpHandler(这个当然是在...
标签: Web开发
带验证的阅读器 XmlValidatingReader类实现了XmlReader类,它提供了支持多种类型的XML验证:DTD,XML-Data Reduced(XDR)架构,以及XSD,DTD和XSD都是W3C官方推荐的。而XDR是Microsoft早期用于处理XML构架的一种格式。 你可以用XmlVlidatingReader类去验证XML文档和XML片断。XmlValidatingReader类工作在XML阅读器上面---是一个典型的XM...

经验教程

380

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部