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

C#實(shí)現(xiàn)IDisposable接口淺析

開發(fā) 后端
這里介紹通過(guò)C#實(shí)現(xiàn)IDisposable接口你可以完成了兩個(gè)事務(wù):你為客戶端及時(shí)地釋放自己持有的所有受控資源提供了機(jī)制;你為客戶端提供了一種釋放非受控資源的標(biāo)準(zhǔn)途徑。

C#語(yǔ)言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#實(shí)現(xiàn)IDisposable接口,包括介紹標(biāo)準(zhǔn)的Dispose模式等方面。

通過(guò)C#實(shí)現(xiàn)IDisposable接口你可以完成了兩個(gè)事務(wù):你為客戶端及時(shí)地釋放自己持有的所有受控資源提供了機(jī)制;你為客戶端提供了一種釋放非受控資源的標(biāo)準(zhǔn)途徑。這是一個(gè)很大的進(jìn)步。當(dāng)你在類型中實(shí)現(xiàn)了Idisposable接口的時(shí)候,客戶端可以避免終結(jié)操作的開銷,你的類就成為.NET世界中的"良民"了。

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

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

  1. protected virtual void Dispose( bool isDisposing );  

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

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

  1. publicclassMyResourceHog:IDisposable  
  2. {  
  3. //已經(jīng)被處理過(guò)的標(biāo)記  
  4. privatebool_alreadyDisposed=false;  
  5. //終結(jié)器。調(diào)用虛擬的Dispose方法  
  6. ~MyResourceHog()  
  7. {  
  8. Dispose(false);  
  9. }  
  10.  
  11. //IDisposable的實(shí)現(xiàn)  
  12. //調(diào)用虛擬的Dispose方法。禁止Finalization(終結(jié)操作)  
  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:此處釋放非受控資源。設(shè)置被處理過(guò)標(biāo)記  
  30. _alreadyDisposed=true;  
  31. }  

在受控環(huán)境中,你不必為自己建立的每個(gè)類型編寫終結(jié)器,你只需要為存儲(chǔ)非受控類型,或者包含了C#實(shí)現(xiàn)IDisposable接口的成員的類型編寫終結(jié)器。即使你只需要Disposable接口,不需要finalizer,也應(yīng)該同時(shí)實(shí)現(xiàn)整個(gè)模式。否則,你會(huì)使衍生類的標(biāo)準(zhǔn) Dispose思想的實(shí)現(xiàn)變得很復(fù)雜,從而限制了衍生類的功能。請(qǐng)遵循前面談到的標(biāo)準(zhǔn)的Dispose思想,這將使你、你的類的用戶、從你的類型建立衍生類的用戶的生活更加輕松。

【編輯推薦】

  1. C#窗體里調(diào)用淺談
  2. C#調(diào)用ListEmployee命令
  3. C# CreateEmployeeDefinition()函數(shù)
  4. C#實(shí)現(xiàn)斷點(diǎn)續(xù)傳詳細(xì)剖析
  5. C# Employee對(duì)象淺談
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2009-09-01 18:29:24

C#實(shí)現(xiàn)多個(gè)接口

2009-08-27 14:29:28

顯式實(shí)現(xiàn)接口

2009-08-27 18:09:49

C#接口的實(shí)現(xiàn)

2009-08-27 17:59:56

C#接口定義

2009-08-07 08:53:52

C# ICloneab

2024-12-02 00:53:45

IDisposabl工具接口

2009-08-31 17:02:28

C#接口編程

2009-09-28 14:45:22

C#接口的定義

2009-08-24 15:12:13

C# 泛型接口

2009-09-02 15:34:37

C#實(shí)現(xiàn)插件構(gòu)架

2009-08-27 13:05:06

C#接口特點(diǎn)C#接口實(shí)例

2009-08-31 16:37:20

C#接口定義

2009-09-18 19:21:17

C#接口

2010-01-14 17:13:53

C++接口

2009-08-21 09:20:44

C#異步套接字

2009-08-28 15:57:56

C#線程傳遞參數(shù)

2009-09-09 11:29:32

C# TextBox事

2009-09-02 17:24:44

C#關(guān)機(jī)代碼

2009-08-13 18:15:06

C#繼承構(gòu)造函數(shù)

2009-08-28 16:03:15

C#程序?qū)崿F(xiàn)鼠標(biāo)移動(dòng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧洲一级黄 | 亚洲性人人天天夜夜摸 | 亚洲免费视频网址 | 在线 丝袜 欧美 日韩 制服 | 国产日韩一区二区 | 亚洲九九色 | 九色av| 一区二区三区在线播放 | 毛片免费视频 | 91色站| 日本黄色大片免费 | 国产资源视频 | 97久久国产| 最新一级毛片 | 亚洲视频一区 | 日本三级黄视频 | 99r在线| 国产精品精品视频一区二区三区 | 国产一区二区免费在线 | 久久这里有精品 | 又黑又粗又长的欧美一区 | 超碰一区二区 | www.日韩| 中文在线观看视频 | 黑色丝袜三级在线播放 | 久久久国产精品一区 | 久久99精品久久 | 成人小视频在线 | 久久高清国产 | 天天躁日日躁狠狠躁2018小说 | 久久av一区二区三区 | 91中文字幕在线 | 日韩性在线| 国产精品久久亚洲7777 | av天空| 日韩影音 | 免费一级片 | 天天干天天爱天天爽 | 欧美乱做爰xxxⅹ久久久 | 超碰97免费| 欧美在线视频a |