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

实现 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 为源自 Bitmap 和 Metafile 的类提供功能的抽象基类。
ImageAttributes ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。ImageAttributes 对象维护多个颜色调整设置,包括颜色调整矩阵、灰度调整矩阵、伽玛校正值、颜色映射表和颜色阈值。

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

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

通过 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 方法。

转载于:https://www.cnblogs.com/kingeric/archive/2007/01/27/632195.html

IDisposable 接口介绍相关推荐

  1. 正确使用IDisposable接口

    通过阅读Microsoft文档 ,我知道IDisposable接口的"主要"用途是清理非托管资源. 对我来说,"非托管"意味着诸如数据库连接,套接字,窗口句柄之 ...

  2. .NET中IDisposable接口的基本使用

    首先来看MSDN中关于这个接口的说明: [ComVisible(true)] public interface IDisposable { // Methods void Dispose(); } 1 ...

  3. 实现一个对象验证库系列 -- 1) 接口介绍以及总体思路概述 (请大神批评)

    前情回顾: 上一篇 0) 目录以及库结构介绍 简单描述了下库的代码结构 本文将从接口部分阐述总体的思路 1) 接口介绍以及总体思路概述 如下图,我总共定义了10个Interface 这些实际可分为两类 ...

  4. 计算机 编程 教程 pdf,计算机专业教程-第3章编程接口介绍.pdf

    下载 第3章 编程接口介绍 • DB2 UDB应用程序概述 • 嵌入S Q L编程 • CLI/ODBC应用程序 • JAVA应用程序 • DAO .R D O .A D O应用程序 本章将介绍对DB ...

  5. Python requests介绍之接口介绍

    Python requests介绍 引用官网介绍 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. Requests 允许你发送纯天然,植物饲养的 HTTP/1. ...

  6. 利用IDisposable接口构建包含非托管资源对象

    托管资源与非托管资源 在.net中,对象使用的资源分为两种:托管资源与非托管资源.托管资源由CLR进行管理,不需要开发人员去人工进行控制,.NET中托管资源主要指"对象在堆中的内存" ...

  7. Java—Iterator接口介绍及使用

    Iterator接口介绍   Iterator称之为迭代器,是去遍历Collection.Map集合中的元素对象. Iterator常用方法 boolean hasNext():判断是否还有下一个遍历 ...

  8. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  9. 如何编写提供了IDisposable接口的类.

    这里提供了一个代码模板,直接套用就行. public class BaseClass: IDisposable {        //实现 IDisposable 接口的Dispose()方法.    ...

最新文章

  1. WeifenLuo.WinFormsUI.Docking
  2. 因热爱而编码,创造至美生活,挑战高效工作 阿里云智能开发者创新应用大赛全记录...
  3. python计算n的32次方_获得用户输入的一个整数N,计算并输出N的32次方。_学小易找答案...
  4. 语音信号处理之(一)动态时间规整(DTW)
  5. 逻辑漏洞——权限控制问题
  6. iptables 配置后连接不上数据库_CentOs中iptables配置允许mysql远程访问
  7. c语言链表输出header中的乱码,大家帮忙看看这段代码,最后一个链表输出后总带一些乱码?请教...
  8. musicstore edit方法出错的原因和解决方法
  9. ubuntu java 中文_java部署ubuntu后中文显示问号问题
  10. 嵌入式系统开发流程是怎样的?
  11. PHP基础: CLI模式开发不需要任何一种Web服务器
  12. Windows 无法连接到无线网络
  13. Android省市县三级联动 真实项目抽出 调用只需3行代码
  14. 1127 - 咸鱼文章
  15. Python云端系统开发——将Python数据分析代码发布到Django网站上
  16. java 甘特图_Java报表软件--甘特图(Gantt chart)深度解析
  17. 云队友丨王兴的无限游戏:很多人误认为干掉对手,就胜利结束
  18. 学习笔记:搭建sftp服务
  19. MacbookPro M1安装nodejs
  20. padding在css中是什么意思,html里padding是什么意思

热门文章

  1. 【正一专栏】今晚国足能上演奇迹吗?
  2. Ethernet/IP 学习笔记三
  3. 数据结构源码笔记(C语言):集合的位向量表示
  4. 跨域 || Jsonp
  5. Vue指令之v-on的缩写和事件修饰符||.stop 和 .self 的区别
  6. CTF-RSA-tool 安装全过程
  7. JS知识点笔记-常用方法
  8. CTFshow 爆破 web28
  9. poj 3255 Roadblocks (SPFA)
  10. sdut 1488 连通分量的个数(并查集)