【转】编写高质量代码改善C#程序的157个建议——建议48:Dispose方法应允许被多次调用

 

建议48:Dispose方法应允许被多次调用

一个类型的Dispose方法应该允许被多次调用而不抛出异常。鉴于此,类型内部维护了一个私有的bool变量disposed,如下:

private bool disposed = false;

在实际清理代码的方法中,加入一下判断:

if(disposed)
{
      return;       
}
//省略清理部分的代码,并在方法最后为disposed赋值为true
disposed = true;

这意味着,如果类型已经被清理过,那么清理工作将不再进行。

对象被调用过Dispose方法,并不表示该对象被置为null,且被垃圾回收机制回收过内存,已经彻底储存在了。事实上,对象的引用可能还在。但是,对象被Dispose过,说明对象的正常状态已经不存在了,此时如果调用对象的公开的方法,应该会抛出一个ObjectDisposedException。方法SamplePublicMethod为我们演示了该方法:

        public void SamplePublicMethod()
        {
            if (disposed)
            {
                throw new ObjectDisposedException("SampleClass", "SampleClass is disposed");
            }
            //省略
        }

所以,在Dispose模式中,应该始终为类型创建一个变量,用来表示对象是否Dispose过。

 

 

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

posted @ 2017-12-06 10:41  指间的徘徊  阅读(241)  评论(0编辑  收藏  举报