Class 实现IDisposing方法
2024-09-03 14:21:12
public
class
MyResourceHog : IDisposable
{
// 已经被处理过的标记
private
bool
_alreadyDisposed =
false
;
// 终结器。调用虚拟的Dispose方法
~MyResourceHog()
{
Dispose(
false
);
}
// IDisposable的实现
// 调用虚拟的Dispose方法。禁止Finalization(终结操作)
public
void
Dispose()
{
Dispose(
true
);
GC.SuppressFinalize(
true
);
}
// 虚拟的Dispose方法
protected
virtual
void
Dispose(
bool
isDisposing )
{
// 不要多次处理
if
( _alreadyDisposed )
return
;
if
( isDisposing )
{
// TODO: 此处释放受控资源
}
// TODO: 此处释放非受控资源。设置被处理过标记
_alreadyDisposed =
true
;
}
}
如果衍生类需要执行另外的清除操作,它应该实现受保护的Dispose方法:
public
class
DerivedResourceHog : MyResourceHog
{
// 它有自己的被处理过标记
private
bool
_disposed =
false
;
protected
override
void
Dispose(
bool
isDisposing )
{
// 不要多次处理
if
( _disposed )
return
;
if
( isDisposing )
{
// TODO: 此处释放受控资源
}
// TODO: 此处释放所有受控资源
// 让基类释放自己的资源。基类负责调用GC.SuppressFinalize( )
base
.Dispose( isDisposing );
// 设置衍生类的被处理过标记
_disposed =
true
;
}
}
最新文章
- Objective-c快速入门
- AppBox升级进行时 - 关联表查询与更新(Entity Framework)
- Anaconda died after receiving signal 7
- 设计模式之美:Factory Method(工厂方法)
- Java保留两位小数的几种做法
- 用继承实现XYPoint和Circle两个类
- Remote Direct Memory Access (RDMA)
- 【jQueryMobile】Helloworld而页面切换
- hdu 1536 SG函数模板题
- Spring Boot 整合 elk
- PLSQL安装、PLSQL汉化、激活
- tensorboard基础使用
- CCF CSP 201809-2 买菜
- @RequestParam、@ReqeustBody、@ReponseBody认识
- 小程序获取当前页面URL
- 使用libcurl的正确姿势
- Tomcat Connector原理
- Sprint第二个计划
- 链表一元多项式计算器的实现(Java语言描述)
- React路由配置使用