Posted on 2015-07-29 22:50
Onway 閱讀(717)
評論(0) 編輯 收藏 引用 所屬分類:
使用說明
1,兩個鏈接里面已經解析完Dispose模式了,其他的只是自己的一些理解。
2,如果自定義類型封裝了非托管資源,或者引用了一個封裝了非托管資源的對象時(比如引用了SqlConnection對象),應該實現Dispose模式。
3,如果自定義類型繼承的基類需要Dispose,但該對象本身并沒有需要Dispose的資源時(比如只是附加了一些簡單類型),無需考慮Dispose模式。
4,如果基類實現了Dispose,則其派生類只需重寫protected級別的Dispose方法,釋放本類型的使用到的資源。
public級別的Dispose和Finalize方法都來自繼承。
重寫的Dispose方法,記得最后調用基類帶參的Dispose。
5,附加的Close方法都是直接調用public無參的Dispose方法。
6,類型的析構函數會被編譯器改為Finalize方法,不要重載這個方法。
基類的Finalize方法總是會被自動調用的。
Finalize方法都不應該引用任何對象。
7,不懂這段話,既然基類沒有需要釋放的資源,為何要實現Dispose模式,而為了性能考慮,又不寫析構函數?
那我的派生類,還要先看一下基類,再決定要不要寫析構函數?
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,對象在調用Dispose之后,除了Dispose以外,都應該拋出ObjectDisposedException異常。
9,實現了Finalize的對象,在第一次垃圾回收的時候,不會釋放對象,而只是調用其Finalize方法,第二次回收才會真正釋放對象。