zoukankan      html  css  js  c++  java
  • 【转】编写高质量代码改善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个建议》陆敏技

  • 相关阅读:
    矩阵快速幂的学习(系统的学习)
    hdu3949(线性基,求第k小的异或和
    牛客网训练赛26D(xor)
    牛客网练习赛26B(简单的dp)
    Carryon的字符串
    string的各种函数(系统学习)
    约瑟夫问题(vector的使用)
    vector的学习(系统的学习)
    CodeForces
    POJ-3624-背包问题
  • 原文地址:https://www.cnblogs.com/farmer-y/p/7991519.html
Copyright © 2011-2022 走看看