C#中IDispose接口的實(shí)現(xiàn)及為何這么實(shí)現(xiàn)詳解-創(chuàng)新互聯(lián)

前言

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為梅江等服務(wù)建站,梅江等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為梅江企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

我原本認(rèn)為對于IDispose的實(shí)現(xiàn)方法,只要在里面釋放非托管資源就行了,但是通過網(wǎng)上資料,看到很多實(shí)現(xiàn)方法并不是僅僅做釋放非托管資源,非常迷惑,關(guān)鍵是這些資料也沒詳細(xì)的告訴你為什么這么做?之后通過StackOverflow了解到這一步一步的原因,說的十分詳細(xì),結(jié)合自己的認(rèn)識(shí),翻譯后分享給大家:

一、IDispose的實(shí)現(xiàn)方法

具體的實(shí)現(xiàn)方法,你可以直接查看這個(gè)創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司網(wǎng)站的教程:

https://www.jb51.net/article/54899.htm

如果你能看懂,并且很清楚為什么那么做。那么以下的文章你就可以略去不看。如果不清楚為什么那么做,請帶著你的迷惑往下看:

二、為什么那樣實(shí)現(xiàn)

英文好的可以直接去StackOverflow原文地址:

https://stackoverflow.com/questions/538060/proper-use-of-the-idisposable-interface/538238#538238

2.1、進(jìn)行之前

在C++中,所有你在堆上申請的內(nèi)存空間,必須手動(dòng)釋放掉,否則就會(huì)造成內(nèi)存的泄露。這可能會(huì)讓你在寫程序的時(shí)候要花點(diǎn)心思在內(nèi)存的管理上而不是專注于解決你編程的目的—解決問題。所以作為C++的進(jìn)化版C#使用了GC(Garbage Collector)來進(jìn)行內(nèi)存的管理以達(dá)到自動(dòng)釋放不需要的內(nèi)存的目的,但是GC并不能做的十分完美,對于一些非托管資源,GC無能為力,這就要求我們必須手動(dòng)的釋放那么非托管資源,為了更好的去做到這一點(diǎn),我們就要編寫一種方法,通過手動(dòng)調(diào)用這個(gè)方法,我們就能夠釋放掉非托管資源。

注:

什么是托管資源和非托管資源?

托管資源就是托管給CLR的資源,CLR能對這些資源進(jìn)行管理。而非托管資源則是CLR無法對這些資源管理,這些資源的申請、釋放必須由使用者自行管理。

例如,像Win32編程中的文件句柄,上下文句柄、窗口或網(wǎng)絡(luò)連接等資源都屬于非托管資源。但是如果這些非托管資源在.Net中進(jìn)行了封裝,成為了.Net類庫中的一部分,它就不屬于非托管資源了,因?yàn)樵趯λ鼈兎庋b的過程中,就實(shí)現(xiàn)了它們的自動(dòng)管理功能。

也就是說,你能在.Net中找到的類產(chǎn)生的對象,都是托管資源。

(理解這點(diǎn)很重要,這可能是你看不懂上面實(shí)現(xiàn)教程的重要一個(gè)原因!)

注:

GC進(jìn)行垃圾回收的時(shí)間和順序?

GC進(jìn)行垃圾回收的時(shí)間我們根本無法確定(當(dāng)然你手動(dòng)調(diào)用GC的垃圾回收方法除外),并且順序也不能確定!也就是說,你先申請的空間有可能在你后申請的空間釋放之后釋放。

GC對于實(shí)現(xiàn)析構(gòu)函數(shù)和沒實(shí)現(xiàn)析構(gòu)函數(shù)的類處理方法不一樣,簡單些說GC對于實(shí)現(xiàn)了析構(gòu)函數(shù)的類一定會(huì)調(diào)用他們的析構(gòu)函數(shù)。

關(guān)于.Net的垃圾回收機(jī)制,你可以暫時(shí)先知道這么多,待看完了這篇文章再去深入了解。

2.2、我們需要編寫一種方法去釋放!

為了去清除一些非托管資源,你創(chuàng)建的類需要有一個(gè)public方法,方法的名字可以隨意命名

例如:

public void Cleanup() 
public void Shutdown() 
…… 

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)頁名稱:C#中IDispose接口的實(shí)現(xiàn)及為何這么實(shí)現(xiàn)詳解-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article8/hijip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、Google、網(wǎng)站維護(hù)、云服務(wù)器、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)