我的代码使用默认的Idisposable实现模板(模式).
片段:
public void dispose() { dispose(true); GC.SuppressFinalize(this); } protected virtual void dispose(bool isdisposing) { if (!this.disposed) { if (isdisposing) { //cleanup managed resources } //cleanup unmanaged resources this.disposed = true; } }
我的问题:为什么在dispose public方法中调用“GC.SuppressFinalize(this)”?在处理托管资源后,我将在保护方法的“if(isdisposing)”部分放置“GC.SuppressFinalize(this)”.
喜欢这个:
protected virtual void dispose(bool isdisposing) { if (!this.disposed) { if (isdisposing) { //cleanup managed resources GC.SuppressFinalize(this); } //cleanup unmanaged resources this.disposed = true; } }
解决方法
我想这是一个明确的模板设计模式.
您的抽象类被设计为处理所需的所有重要/必需的任务(这里,GC.SuppressFinalize(this)),并允许派生类仅覆盖代码的一部分.
这里有两种情况:
代码片段1,SuppressFinalize,处理
Snippet 2,in dispose(true)
这里,Snippet 1,确保始终执行GC.SuppressFinalize.而代码段2,在派生类的支持下执行GC.SuppressFinalize.
因此,通过放置GC.SuppressFinalize,在dispose方法中,您作为类的设计者始终确保无论派生类写入的代码如何,GC.SuppressFinalize都将被执行.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。