在 .NET Framework 中,组件是指实现 System.ComponentModel.IComponent 接口的一个类,或从实现 IComponent 的类中直接或间接派生的类。在编程中,“组件”这个术语通常用于可重复使用并且可以和其他对象进行交互的对象。.NET Framework 组件满足这些一般要求,另外还提供诸如控制外部资源和设计时支持等功能。
控件
控件是提供(或实现)用户界面 (UI) 功能的组件。.NET Framework 为控件提供两个基类:一个用于客户端 Windows 窗体控件,另一个用于 ASP.NET 服务器控件。它们是 System.Windows.Forms.Control 和 System.Web.UI.Control。.NET Framework 类库中的所有控件直接或间接从这两个类派生。System.Windows.Forms.Control 从 Component 派生,本身提供 UI 功能。System.Web.UI.Control 实现 IComponent 并提供可在其上轻松添加 UI 功能的基础结构。
控件是组件的派生类,每个控件都是一个组件,但并不是每个组件都是控件。
组件在运行时不能呈现UI,而控件可以在运行时呈现UI
组件是放在容器Container上的,而控件则是放在Windows Form或者Web Form上的。
当然Windows Form 或者Web Form 本身就是一个容器Container
组件和控件一般可以放到VS的工具箱中。一般组件只是在WinForm时有设计支持,Webfrom在工具箱成灰色
有的控件也没有UI呈现的 如 SqlDataSource 上次看到有人把它作为组作而非控件 这是不对的 它是System.Web.UI.Control的派生类
比较常用的组件有 Timer Tootip Imagelist Backgroudwork 等
System.Data 下有几个另类的组件
DataColumn、DataSet、DataTable、DataView
我们天天都在用,却没注意它们也是组件
因为它们有的几乎没有设计时支持,它们在工具箱数据选项卡,显示全部就可以看到了
还有 System.Web.Services.WebService System.Timers.Timer也是组件
所以说不要把组件和VS工具栏里的等同,设计时IED支持不是必须的 ,“组件”这个术语通常用于可重复使用并且可以和其他对象进行交互的对象。
组件IComponent 有两种默认实现
System.ComponentModel.Component :IComponent
System.ComponentModel.MarshalByValueComponent:IComponent
Component 是按引用封送 MarshalByValueComponent是按值封送
以下可远程控制的组件应该由引用封送:封装系统资源的可远程控制组件,较大的可远程控制组件或作为单个实例存在的可远程控制组件。由引用封送的组件的基类是 System.ComponentModel.Component。该基类实现 IComponent 并从 MarshalByRefObject 派生。.NET Framework 类库中的许多组件从 Component 派生,包括 System.Windows.Forms.Control(Windows 窗体控件的基类)、System.Web.Services.WebService(使用 ASP.NET 创建的 XML Web 服务的基类)和 System.Timers.Timer(生成递归事件的类)。
仅保留状态的可远程控制组件应该由值封送。由值封送的组件的基类是 System.ComponentModel.MarshalByValueComponent。该基类实现 IComponent 并从 Object 派生。.NET Framework 类库中只有少量组件从 MarshalByValueComponent 派生。所有此类组件都在 System.Data 命名空间中(DataColumn、DataSet、DataTable、DataView 和 DataViewManager)。
容器和站点
如果您正在为 Windows 窗体或 Web 窗体页(ASP.NET 页)开发组件和控件,则不需要实现容器或站点。Windows 窗体和 Web 窗体的设计器就是 Windows 窗体和 ASP.NET 服务器控件的容器。容器向放置在其中的组件和控件提供服务。在设计时,控件放置在设计器中并从设计器获得服务。为了保持完整性,以下给出了容器和站点的定义。
- Container
-
容器是一个实现 System.ComponentModel.IContainer 接口的类,或从实现该接口的类派生的类。容器在逻辑上包含一个或多个组件,这些组件叫做容器的子组件。
- Site
-
站点是一个实现 System.ComponentModel.ISite 接口的类,或从实现该接口的类派生的类。站点由容器提供,用来管理其子组件及与子组件进行通信。通常,容器和站点作为一个单元来实现。