定义一种释放分配的非托管资源的方法。

实现 IDisposable 的类

说明
AsymmetricAlgorithm 表示所有不对称算法的实现都必须从中继承的抽象基类。
BinaryReader 用特定的编码将基元数据类型读作二进制值。
BinaryWriter 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。
Brush 从此抽象基类派生出的类定义用于填充图形形状(如矩形、椭圆形、扇形、多边形和封闭路径)内部的对象。
CacheDependency 跟踪缓存依赖项,缓存依赖项可以是应用程序的 Cache 中的文件、目录或与其他对象的键。无法继承此类。
Component 提供 IComponent 接口的基实现并启用应用程序之间的对象共享。
ComponentDesigner 用于扩展组件的设计模式行为的基本设计器类。
Container 封装零个或更多个组件。
Control 定义由所有 ASP.NET 服务器控件共享的属性、方法和事件。
CryptoAPITransform 执行数据的加密转换。
Cursor 代表用于绘制鼠标指针的图像。
CustomLineCap 封装自定义的用户定义的线帽。
DesignerTransaction 提供一种方法来对一系列的设计时操作进行分组,从而提高性能并使得大多数类型的更改都能撤消。
EncoderParameter 可以使用 EncoderParameter 对象将值的数组传递给图像编码器。还可以使用 EncoderParameter 对象来接收特定图像编码器的特定参数所支持的一系列可能的值。
EncoderParameters 封装 EncoderParameter 对象的数组。
EventHandlerList 提供一个简单的委托列表。不能继承此类。
Font 定义特定的文本格式,包括字体、字号和字形属性。无法继承此类。
FontCollection 已安装和私有字体集合的基类。提供用于获取集合中所包含字体族的列表的方法。有关字体和文本的附加信息(包括代码示例),请参见这些文档的“使用 GDI+ 托管类”一节中的“字体和文本”。
FontFamily 定义有着相似的基本设计但在形式上有某些差异的一组字样。无法继承此类。
FromBase64Transform 从 Base 64 转换 CryptoStream
Graphics 封装 GDI+ 绘图面。无法继承此类。
GraphicsPath 表示一系列相互连接的直线和曲线。无法继承此类。
GraphicsPathIterator 提供循环访问 GraphicsPath 对象中的子路径并测试每一子路径中包含的形状类型的能力。无法继承此类。
HashAlgorithm 表示所有加密哈希算法实现均必须从中派生的基类。
HttpApplication 定义 ASP.NET 应用程序中的所有应用程序对象通用的方法、属性和事件。此类是由用户在 global.asax 文件中定义的应用程序的基类。
Icon 表示 Windows 图标,它是用于表示对象的小位图图像。尽管图标的大小由系统决定,但仍可将其视为透明的位图。
Image 为源自 BitmapMetafile 的类提供功能的抽象基类。
ImageAttributes ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。ImageAttributes 对象维护多个颜色调整设置,包括颜色调整矩阵、灰度调整矩阵、伽玛校正值、颜色映射表和颜色阈值。

呈现过程中,可以对颜色进行校正、调暗、调亮或删除等等。要应用这些操作,请初始化 ImageAttributes 对象,并将 ImageAttributes 对象的地址(连同 Image 对象的地址)传递给 DrawImage 方法。

IsolatedStorageFile 表示包含文件和目录的独立存储区。
License 为所有许可证提供抽象(在 Visual Basic 中为 MustInherit)基类。向组件的特定实例授予许可证。
LocalizationExtenderProvider 向根设计器提供本地化功能的设计时支持。
ManagementObjectCollection 表示通过 WMI 检索到的管理对象的不同集合。此集合中的对象为从 ManagementBaseObject 派生的类型,包括 ManagementObjectManagementClass

通过 ManagementObjectSearcher 对象执行 WMI 查询,或者通过表示指定类型的 ManagementClass 检索该类型管理对象的枚举,能够得到此集合。此外,这也可能是以指定方式与特定管理对象相关的管理对象集合 — 在这种情况下,此集合可以通过诸如 GetRelated 之类的方法检索到。

此集合可以通过 ManagementObjectCollection.ManagementObjectEnumerator 遍历,并且能够针对各种管理任务对集合中的对象进行检查或操作。

ManagementObjectCollection.ManagementObjectEnumerator 表示集合的枚举数。
MarshalByValueComponent 实现 IComponent 并提供可远程控制的组件的基实现,该组件是由值封送的(传递序列化对象的副本)。
Matrix 封装表示几何变形的 3 x 3 仿射矩阵。无法继承此类。
MessageEnumerator 提供一个只进游标,用来枚举通过消息队列中的消息。
MessageQueueEnumerator 提供一个只进游标,以枚举通过消息队列中的消息。
MessageQueueTransaction 提供消息队列内部事务。
OdbcDataReader 提供从数据源读取数据行的只进流的方法。无法继承此类。
OdbcTransaction 表示要在数据源执行的 SQL 事务。不能继承此类。
OleDbDataReader 提供从数据源读取数据行的只进流的方法。无法继承此类。
OleDbTransaction 表示要在数据源执行的 SQL 事务。无法继承此类。
OracleDataReader 提供从数据源读取数据行的只进流的方法。无法继承此类。
OracleTransaction 表示要在数据库中生成的事务。无法继承此类。
PaintEventArgs Paint 事件提供数据。
Pen 定义用于绘制直线和曲线的对象。无法继承此类。
Region 指示由矩形和由路径构成的图形形状的内部。无法继承此类。
RegistryKey 表示 Windows 注册表中的项级节点。此类是注册表封装。
ResourceReader 枚举 .resources 文件和流,并读取顺序的资源名和资源值对。
ResourceSet 存储已针对某个特定区域性进行了本地化的所有资源,忽略所有其他区域性(包括任何代用规则)。
ResourceWriter 以系统默认的格式将资源写入输出文件或输出流。
ResXResourceReader 枚举 XML 资源 (.resx) 文件和流,并读取顺序资源名称和值对。
ResXResourceWriter 将资源写入 XML 资源 (.resx) 文件或输出流。
SearchResultCollection 包含在 DirectorySearcher 查询过程中由 Active Directory 层次结构返回的 SearchResult 实例。
ServicedComponent 表示使用 COM+ 服务的所有类的基类。
Socket 实现 Berkeley 套接字接口。
SqlCeCommand 表示对数据源执行的 SQL 语句。
SqlCeConnection 表示到数据源的连接是打开的。
SqlCeDataReader 提供从数据源读取数据行的只进流的方法。无法继承此类。
SqlCeEngine 表示 SQL Server CE 引擎的属性、方法及其他对象。不能继承此类。
SqlCeRemoteDataAccess 初始化 SqlCeRemoteDataAccess 对象的新实例。有关“远程数据访问”的更多信息,请参见“SQL Server CE 联机图书”。
SqlCeReplication 初始化 SqlCeReplication 对象的新实例。有关复制的更多信息,请参见“SQL Server 联机图书”。有关 SQL Server CE 中合并复制的更多信息,请参见“SQL Server CE 联机图书”。
SqlCeTransaction 表示要在数据源执行的 SQL 事务。不能继承此类。
SqlDataReader 提供一种从数据库读取只进的行流的一种方式。无法继承此类。
SqlTransaction 表示要在 SQL Server 数据库中处理的 Transact-SQL 事务。无法继承此类。
Stream 提供字节序列的一般视图。
StringFormat 封装文本布局信息(如对齐方式和行距),显示操作(如省略号插入和国家标准 (National) 数字位替换)和 OpenType 功能。无法继承此类。
SymmetricAlgorithm 表示所有对称算法的实现都必须从中继承的抽象基类。
TcpClient 为 TCP 网络服务提供客户端连接。
TempFileCollection 表示临时文件的集合。
TemplateEditingVerb 表示一个设计器谓词,该谓词创建模板编辑框并且只能由模板编辑器调用。
TextReader 表示可读取连续字符系列的阅读器。
TextWriter 表示可以编写一个有序字符系列的编写器。该类为抽象类。
Timer 提供以指定的时间间隔执行方法的机制。无法继承此类。
ToBase64Transform CryptoStream 转换为 Base 64。
TraceListener 为监视跟踪和调试输出的侦听器提供抽象(在 Visual Basic 中为 MustInherit)基类。
UdpClient 提供用户数据文报 (UDP) 网络服务。
WaitHandle 封装等待对共享资源的独占访问权的操作系统特定的对象。
WebResponse 提供来自统一资源标识符 (URI) 的响应。这是一个抽象(在 Visual Basic 中为 MustInherit)类。

备注

当托管对象不再使用时,垃圾回收器会自动释放分配给该对象的内存,不过,进行垃圾回收的时间不可预知。另外,垃圾回收器对窗口句柄、打开的文件和流等非托管资源一无所知。

将此接口的 Dispose 方法与垃圾回收器一起使用来显式释放非托管资源。当不再需要对象时,对象的使用者可以调用此方法。

向现有类添加 IDisposable 接口是重大的更改,因为它更改了类的语义。

==========================================================================

使用此方法关闭或释放由实现此接口的类的实例保持的文件、流和句柄等非托管资源。根据约定,此方法用于与释放对象保持的资源或准备对象以便重新使用有关的所有任务。

实现此方法时,对象必须通过在包容层次结构中传播调用来进行查找,以确保释放所有保持的资源。例如,如果对象 A 分配对象 B,而对象 B 又分配对象 C,那么 A 的 Dispose 实现必须对 B 调用 Dispose,而 B 反过来对 C 调用 Dispose。如果对象的基类实现了 IDisposable,对象还必须调用它们基类的 Dispose 方法。

如果某对象的 Dispose 方法被调用一次以上,则该对象必须忽略第一次调用后的所有调用。如果对象的 Dispose 方法被调用多次,对象不得引发异常。如果由于资源已被释放且以前未调用 Dispose 而发生错误时,Dispose 会引发异常。

资源类型可能使用特定的约定来表示已分配状态和已释放状态。流类即是这样一种示例,传统上认为它们要么打开要么关闭。具有此类约定的类可能选择实现带有自定义名称(如 Close)的公共方法,由该方法调用 Dispose 方法。

因为 Dispose 方法必须显式进行调用,所以,实现 IDisposable 的对象还必须实现一个完成器,以便在未调用 Dispose 时处理释放资源问题。默认情况下,垃圾回收器会在回收对象的内存之前自动调用对象的完成器。然而,在调用 Dispose 方法后,通常不需要垃圾回收器调用已处置对象的完成器。为防止自动终止,Dispose 实现可以调用 GC.SuppressFinalize 方法。

posted on 2007-01-27 21:49  kingeric  阅读(617)  评论(0编辑  收藏  举报