类、控件和组件,容器、站点和组件

本文介绍了.NET Framework中的组件、控件概念,控件是提供用户界面功能的组件,可以从System.Windows.Forms.Control和System.Web.UI.Control派生。组件不提供UI,但可与其他对象交互,如Timer、Tooltip。DataSet、DataTable等也属于组件。同时,文章提到了组件的两种默认实现Component和MarshalByValueComponent,以及容器和站点在Windows Forms和Web Forms中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组件

          在 .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 接口的类,或从实现该接口的类派生的类。站点由容器提供,用来管理其子组件及与子组件进行通信。通常,容器和站点作为一个单元来实现。

                                                                                                                                                    未完待续
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值