您当前的位置: 首页 > 

Class vs. Component vs. Control 类、组件和控件

发布时间:2017-12-10 19:38:42 ,浏览量:0

说明

本主题介绍 Windows 窗体和 ASP.NET 类。  此处进行的讨论不适用于 WPF 类。有关创作 WPF 控件的信息,请参见控件创作概述。

以下列表为实施者提供了全面的指南。

  • 如果您的类使用外部资源但不用于设计图面,则实现 IDisposable,或者从直接或间接实现 IDisposable 的类派生。

  • 如果您的类要用于设计图面(如 Windows 窗体或 Web 窗体设计器)上,则实现  IComponent,或者从直接或间接实现  IComponent 的类派生。  请注意,IComponent 扩展 IDisposable,因此 IComponent 类型始终是 IDisposable 类型。 与不是 IComponent 的 IDisposable 类型相比,IComponent 类型的性能系统开销要小。但这一不足通常可由在设计时和运行时安置 IComponent 的能力来弥补。 (在本主题的后面部分将对该安置功能进行说明)。

  • 如果您需要一个可设计(可在设计图面上使用)并且可按引用封送的类,则可从  Component 派生。  Component 是按引用封送的 IComponent 类型的基实现。

  • 如果您需要一个可按值封送的可设计类,则可从  MarshalByValueComponent 派生。  MarshalByValueComponent 是按值封送的 IComponent 类型的基实现。

  • 如果希望向对象模型层次中引入 IComponent 类型,但由于单次继承的原因而不能从 Component 或 MarshalByValueComponent 之类的基派生,请实现 IComponent。

  • 如果需要提供用户界面的可设计类,则该类是控件。  控件必须从以下基本控件类之一直接或间接派生:Control 或 Control。

     说明

    在 .NET Framework 中,组件是一种类,它实现  IComponent 接口或者直接或间接地从实现  IComponent 的类派生。  在编程中,“组件”这个术语通常用于可重复使用并且可以和其他对象进行交互的对象。 .NET Framework 组件满足这些一般要求,另外还提供诸如控制外部资源和设计时支持等功能。

    说明

    即使通过 Dispose 提供对资源的显式控制,也应该始终通过终结器(析构函数)提供隐式清理,以防用户未能对您的组件调用 Dispose 时资源永久泄漏。

    下面的示例显示了在基组件和在派生的组件中实现 Dispose 的方式。

    VB
    class BaseComponent : IComponent {
    
       public true);
         GC.SuppressFinalize(protected void Dispose(if (disposing) {
              // Free your own state (unmanaged objects). }
    
       false);
       }
    }
       
    public protected void Dispose(if (disposing) {
          // You must invoke the Dispose method of the base class. // Free your own state. ...
       }
       // No Dispose() method. }
    
       
    
    承载组件

    组件可以被放置(承载)在一个容器(本主题稍后部分进行了定义)中。  当组件被放置后,它通过其站点(本主题稍后部分进行了定义)与容器进行交互并能够通过站点从其容器查询并得到服务。 为了确保资源在容器被拆卸后释放,容器必须实现 IDisposable 接口。 在其 Dispose 方法的实现中,容器必须释放它保留的所有资源,并调用它包含的每个组件的 Dispose 方法。

    包容是逻辑上的,不需要可视的表示形式。  放置数据库组件的中间层容器就是非可视包容的一个示例。 可在 Visual Studio 的 Windows 窗体设计器和 Web 窗体设计器中找到可视包容。 可视化设计图面是承载窗体组件(Web 窗体中的页组件)的容器。

    说明

    按值和按引用封送的对象的基类分别是  Object 和  MarshalByRefObject,但对应的派生类名为  MarshalByValueComponent 和  Component。  命名方案背后的逻辑是越常用的类型,其名称就越简单。

    如果不对组件进行远程控制,则不要从 Component 的基实现派生,而应直接实现 IComponent。

控件
说明

每个控件都是一个组件,但并不是每个组件都是控件。

容器和站点
概念
属性概述
组件的设计时特性)
其他资源
使用 .NET Framework 开发自定义 Windows 窗体控件
Developing Custom ASP.NET Server Controls
扩展设计时支持
原文: https://msdn.microsoft.com/zh-cn/library/0b1dk63b.aspx
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    105932博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0586s