IDisposable 接口介绍
定義一種釋放分配的非托管資源的方法。
實現 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 接口介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XPath访问任意深度的XML数据
- 下一篇: 什么是 EXIF