Posted on 2015-07-29 22:50
Onway 閱讀(718)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
使用說(shuō)明
1,兩個(gè)鏈接里面已經(jīng)解析完Dispose模式了,其他的只是自己的一些理解。
2,如果自定義類(lèi)型封裝了非托管資源,或者引用了一個(gè)封裝了非托管資源的對(duì)象時(shí)(比如引用了SqlConnection對(duì)象),應(yīng)該實(shí)現(xiàn)Dispose模式。
3,如果自定義類(lèi)型繼承的基類(lèi)需要Dispose,但該對(duì)象本身并沒(méi)有需要Dispose的資源時(shí)(比如只是附加了一些簡(jiǎn)單類(lèi)型),無(wú)需考慮Dispose模式。
4,如果基類(lèi)實(shí)現(xiàn)了Dispose,則其派生類(lèi)只需重寫(xiě)protected級(jí)別的Dispose方法,釋放本類(lèi)型的使用到的資源。
public級(jí)別的Dispose和Finalize方法都來(lái)自繼承。
重寫(xiě)的Dispose方法,記得最后調(diào)用基類(lèi)帶參的Dispose。
5,附加的Close方法都是直接調(diào)用public無(wú)參的Dispose方法。
6,類(lèi)型的析構(gòu)函數(shù)會(huì)被編譯器改為Finalize方法,不要重載這個(gè)方法。
基類(lèi)的Finalize方法總是會(huì)被自動(dòng)調(diào)用的。
Finalize方法都不應(yīng)該引用任何對(duì)象。
7,不懂這段話,既然基類(lèi)沒(méi)有需要釋放的資源,為何要實(shí)現(xiàn)Dispose模式,而為了性能考慮,又不寫(xiě)析構(gòu)函數(shù)?
那我的派生類(lèi),還要先看一下基類(lèi),再?zèng)Q定要不要寫(xiě)析構(gòu)函數(shù)?
Implement the dispose design pattern on a base type that commonly has derived types that hold onto resources, even if the base type does not. If the base type has a Close method, often this indicates the need to implement Dispose. In such cases, do not implement a Finalize method on the base type. Finalize should be implemented in any derived types that introduce resources that require cleanup.
8,對(duì)象在調(diào)用Dispose之后,除了Dispose以外,都應(yīng)該拋出ObjectDisposedException異常。
9,實(shí)現(xiàn)了Finalize的對(duì)象,在第一次垃圾回收的時(shí)候,不會(huì)釋放對(duì)象,而只是調(diào)用其Finalize方法,第二次回收才會(huì)真正釋放對(duì)象。