Onway

我是一只菜菜菜菜鸟...
posts - 61, comments - 56, trackbacks - 0, articles - 34

Dispose模式

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方法,第二次回收才会真正释放对象。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理