有一个类,实现了数据库的操作。操作数据库是通过FileStream实现的。我想要这个数据库在终结的时候会自动的调用Save方法把数据保存到相应的文件里面。这个dispose应该怎样设计。

解决方案 »

  1.   

    ~DBClass
    {
       Save();
    }
      

  2.   

    在这个之前,那个FileStream就已经Close了,没有办法再向里面写文件。
      

  3.   

    就是自己写了个基于文件的数据库,数据都是暂存在内存里面的。DBClass里面有一个Close()的方法,功能是把内存里面的数据保存到文件的。
    正常情况下在客户端会调用Close()关闭数据库。但要是在客户端里面忘记了调用Close()关闭数据库,DBClass就要自动调用Close()一次。这个方法怎么设计?
      

  4.   

    简化的DBClass如下
    class DBClass
    {
        public DBClass()
        {
             //do something
        }
        public Open()
        {
             //do something
        }
        public Close()
        {
             //do something
        }
    }
      

  5.   

    搂主给DBClass添加一个析构函数即可~DBClass()
    {
       this.Close();
    }
      

  6.   

    也就是修改如下:
    class DBClass : IDispose忘记是不是这样写的
    {
        public DBClass()
        {
             //do something
        }
        ~DBClass()
        {
           this.Close();
        }

        public Open()
        {
             //do something
        }
        public Close()
        {
             //do something
        }
            
        public void Dispose()
        {
           this.Close();
        }

    }
      

  7.   


    class DBClass : IDispose
    {
        ...FileStream = null;    public void Dispose()
        {
            if(FileStream != null)
            {
                this.Close();
            }
        } 
    }
      

  8.   


    你可以尝试将你的类实现IDispose接口.并实现接口中的Dispose()方法,在此方法中释放你所要释放的资源,比如说关系连接等等.
    然后你用的时候
    using(DBClass s = ...)
    {
    //你的code
    }
    这样using作用域结束后.会自动调用你的Dispose方法
      

  9.   

    下面一段文字摘自msdn:
    警告:
    不要对连接、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中,应该仅释放类直接拥有的非托管资源。如果您的类未拥有任何非托管资源,则不要在类定义中包括 Finalize 方法
    析构中释放资源会有错误的,参考下面帖子:http://topic.csdn.net/u/20081119/09/72d7bcdc-7a67-41c1-8860-ca8c81e9510b.html