Posted on 2015-07-29 22:50
Onway 阅读(695)
评论(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方法,第二次回收才会真正释放对象。