成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#實現IDisposable接口淺析

開發 后端
這里介紹通過C#實現IDisposable接口你可以完成了兩個事務:你為客戶端及時地釋放自己持有的所有受控資源提供了機制;你為客戶端提供了一種釋放非受控資源的標準途徑。

C#語言有很多值得學習的地方,這里我們主要介紹C#實現IDisposable接口,包括介紹標準的Dispose模式等方面。

通過C#實現IDisposable接口你可以完成了兩個事務:你為客戶端及時地釋放自己持有的所有受控資源提供了機制;你為客戶端提供了一種釋放非受控資源的標準途徑。這是一個很大的進步。當你在類型中實現了Idisposable接口的時候,客戶端可以避免終結操作的開銷,你的類就成為.NET世界中的"良民"了。

但是在你建立的這種機制中仍然存在一些問題。怎樣在衍生類清理自己資源的時候同時也讓基類能夠清理資源?如果衍生類重載了終結操作,或者添加了自己的C#實現IDisposable接口,那么這些方法必須調用基類,否則,基類就不能正確地進行清理操作。同樣,finalize(終結操作)和Dispose參與分擔了一些相同的職責。

Finalize方法和Dispose方法的代碼幾乎相同。而且在重載接口函數后并不像你預料的那樣工作。標準的Dispose模式中的第三個方法是一個受保護的虛擬輔助函數,它分解出這些共同的事務,并給衍生類添加一個用于釋放資源的"鉤子(hook)"。基類包含了核心接口的代碼。作為對Dispose()或終結操作的響應,該虛擬函數為衍生類清除資源提供了"鉤子":

  1. protected virtual void Dispose( bool isDisposing );  

這個重載的方法實現支持finalize和Dispose的必要事務,由于它是虛擬的,它為所有的衍生類提供了一個入口點。衍生類可以重載這個方法,為清除自己的資源提供適當的實現,同時還可以調用基類版本。當isDisposing為真(true)的時候,你可以清除受控和非受控資源,當 isDisposing為假(false)的時候,你只能清除非受控資源。在這兩種情況下,你都可以調用基類的Dispose(bool)方法,讓它清除自己的資源。

下面有一個簡短的例子,它演示了你在實現這種模式的時候所提供的代碼框架。MyResourceHog類演示了C#實現IDisposable接口、終結器的代碼,并建立了一個虛擬的Dispose方法:

  1. publicclassMyResourceHog:IDisposable  
  2. {  
  3. //已經被處理過的標記  
  4. privatebool_alreadyDisposed=false;  
  5. //終結器。調用虛擬的Dispose方法  
  6. ~MyResourceHog()  
  7. {  
  8. Dispose(false);  
  9. }  
  10.  
  11. //IDisposable的實現  
  12. //調用虛擬的Dispose方法。禁止Finalization(終結操作)  
  13. publicvoidDispose()  
  14. {  
  15. Dispose(true);  
  16. GC.SuppressFinalize(true);  
  17. }  
  18.  
  19. //虛擬的Dispose方法  
  20. protectedvirtualvoidDispose(boolisDisposing)  
  21. {  
  22. //不要多次處理  
  23. if(_alreadyDisposed)  
  24. return;  
  25. if(isDisposing)  
  26. {  
  27. //TODO:此處釋放受控資源  
  28. }  
  29. //TODO:此處釋放非受控資源。設置被處理過標記  
  30. _alreadyDisposed=true;  
  31. }  

在受控環境中,你不必為自己建立的每個類型編寫終結器,你只需要為存儲非受控類型,或者包含了C#實現IDisposable接口的成員的類型編寫終結器。即使你只需要Disposable接口,不需要finalizer,也應該同時實現整個模式。否則,你會使衍生類的標準 Dispose思想的實現變得很復雜,從而限制了衍生類的功能。請遵循前面談到的標準的Dispose思想,這將使你、你的類的用戶、從你的類型建立衍生類的用戶的生活更加輕松。

【編輯推薦】

  1. C#窗體里調用淺談
  2. C#調用ListEmployee命令
  3. C# CreateEmployeeDefinition()函數
  4. C#實現斷點續傳詳細剖析
  5. C# Employee對象淺談
責任編輯:佚名 來源: 博客園
相關推薦

2009-09-01 18:29:24

C#實現多個接口

2009-08-27 14:29:28

顯式實現接口

2009-08-27 18:09:49

C#接口的實現

2009-08-27 17:59:56

C#接口定義

2009-08-07 08:53:52

C# ICloneab

2009-08-31 17:02:28

C#接口編程

2024-12-02 00:53:45

IDisposabl工具接口

2009-08-24 15:12:13

C# 泛型接口

2009-09-28 14:45:22

C#接口的定義

2009-09-02 15:34:37

C#實現插件構架

2009-09-18 19:21:17

C#接口

2010-01-14 17:13:53

C++接口

2009-08-27 13:05:06

C#接口特點C#接口實例

2009-08-31 16:37:20

C#接口定義

2009-09-02 17:24:44

C#關機代碼

2009-08-13 18:15:06

C#繼承構造函數

2009-09-07 09:36:29

C# DisposeDispose方法

2009-08-28 16:03:15

C#程序實現鼠標移動

2009-08-26 09:54:45

C#打印預覽C#打印

2009-09-09 11:29:32

C# TextBox事
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日本在线观看 | 麻豆国产一区二区三区四区 | 色综合久久久 | 91xxx在线观看 | 特黄毛片 | 欧美一区二区三区在线观看 | 久久久久久毛片免费观看 | 91久久 | 日本一卡精品视频免费 | 免费成人在线网站 | 久久黄色网 | 久草中文在线观看 | 色婷婷国产精品综合在线观看 | 国产精品久久久久久久久久软件 | 色婷婷av一区二区三区软件 | 日韩视频 中文字幕 | 国产91亚洲精品一区二区三区 | 国产精品av久久久久久毛片 | 国产精品久久久精品 | a级片网站| 亚洲国产欧美在线 | 国产精品日韩高清伦字幕搜索 | 午夜激情小视频 | 成人在线免费 | 久久久国产精品 | 亚洲bt 欧美bt 日本bt | 91久久电影 | 在线观看av不卡 | www久久久 | 台湾av在线 | 久久精品视频亚洲 | 亚洲有码转帖 | 欧美精品中文字幕久久二区 | 国产精品99久久久精品免费观看 | 国产乱码精品一区二区三区五月婷 | 在线观看国产www | 国产精品激情 | 一本色道精品久久一区二区三区 | 天天操夜夜看 | 中国一级毛片免费 | 91传媒在线观看 |