mor*_*lli 5 .net c# idisposable
我目前正在修复ac#codebase,它没有很好的Dispose使用模式.
它是一个庞大的代码库,它是一个需要资源的代码库,它在低级别使用许多自定义的非托管c ++库.
我对处理模式有很好的理解.我花了一些时间来理解我认为是关于这个问题的黄金标准文章:Joe Duffy的处理文章
为了尽量减少代码重复,我们一直在考虑一些dispose helper类,所以我的问题是:
如果基类实现了标准的Dispose模式,那么它应该允许它的被处置标志被共享,即.标记为受保护?
澄清我的意思是,在继承层次结构中是否只有一个布尔状态,它定义了对象实例是否已被释放,或者在继承阶梯的每一步都应该有一个私有布尔值?
MSDN和上面链接中的示例在每个级别设置了一个标志,但从不解释其背后的原因.我对这个问题有两个想法,你有什么想法和理由?
我会说不,它不应该分享旗帜.共享标志会创建失败的机会,更好的封装可以防止这种失败.
例如,考虑在最基类上具有只读Disposed属性的场景.支持字段仅在基类的Dispose(disposing)方法中设置为true.这意味着,如果调用基类Dispose,则属性Disposed只能返回true(当然除非有恶意反映).这允许基类提供可执行的合同.
现在考虑相反的情况,那里有一个受保护的setter.任何类现在都可以任意设置Disposed属性为true而不进行任何处理.这为Dispose提供了在没有任何处理时返回true的机会.
我会选择第一个选项,因为它提供了最强制执行的合同.
| 归档时间: |
|
| 查看次数: |
1159 次 |
| 最近记录: |