日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#實現(xiàn)IDisposable接口淺析

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

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

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

Finalize方法和Dispose方法的代碼幾乎相同。而且在重載接口函數(shù)后并不像你預(yù)料的那樣工作。標(biāo)準的Dispose模式中的第三個方法是一個受保護的虛擬輔助函數(shù),它分解出這些共同的事務(wù),并給衍生類添加一個用于釋放資源的"鉤子(hook)"?;惏撕诵慕涌诘拇a。作為對Dispose()或終結(jié)操作的響應(yīng),該虛擬函數(shù)為衍生類清除資源提供了"鉤子":

 
 
 
  1. protected virtual void Dispose( bool isDisposing );  

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

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

 
 
 
  1. publicclassMyResourceHog:IDisposable  
  2. {  
  3. //已經(jīng)被處理過的標(biāo)記  
  4. privatebool_alreadyDisposed=false;  
  5. //終結(jié)器。調(diào)用虛擬的Dispose方法  
  6. ~MyResourceHog()  
  7. {  
  8. Dispose(false);  
  9. }  
  10.  
  11. //IDisposable的實現(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è)置被處理過標(biāo)記  
  30. _alreadyDisposed=true;  
  31. }  

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

【編輯推薦】

  1. C#窗體里調(diào)用淺談
  2. C#調(diào)用ListEmployee命令
  3. C# CreateEmployeeDefinition()函數(shù)
  4. C#實現(xiàn)斷點續(xù)傳詳細剖析
  5. C# Employee對象淺談

網(wǎng)頁名稱:C#實現(xiàn)IDisposable接口淺析
鏈接分享:http://m.5511xx.com/article/cdhojih.html