有一个类,实现了数据库的操作。操作数据库是通过FileStream实现的。我想要这个数据库在终结的时候会自动的调用Save方法把数据保存到相应的文件里面。这个dispose应该怎样设计。
解决方案 »
- 获取XML单个节点的值!
- ASP.NET 在郵件中如何提交HTML表單到ASPX頁
- 求助:在msconfig启动项里如何修改启动顺序
- 绑定了数据的DataGridView如何删除选定的多行?
- 通过反射,能用类名和成员名得到类的静态成员吗?
- 请问你们有没有关于C#语言设计程序界面的电子书籍和资料
- 怎样获得一个MDI窗体的所有子窗体???
- 请问,webbrowser怎么获取跳转页的URL?
- C# list find怎么使用
- 安装与部署.net程序的问题(在线等待)
- 有看过《C#与.net高级程序设计》这本书的朋友吗,帮忙理解“对象的生命周期”中的一小节!!
- 找不到类型或命名空间名称“List”(是否缺少 using 指令或程序集引用?)
{
Save();
}
正常情况下在客户端会调用Close()关闭数据库。但要是在客户端里面忘记了调用Close()关闭数据库,DBClass就要自动调用Close()一次。这个方法怎么设计?
class DBClass
{
public DBClass()
{
//do something
}
public Open()
{
//do something
}
public Close()
{
//do something
}
}
{
this.Close();
}
class DBClass : IDispose忘记是不是这样写的
{
public DBClass()
{
//do something
}
~DBClass()
{
this.Close();
}
public Open()
{
//do something
}
public Close()
{
//do something
}
public void Dispose()
{
this.Close();
}
}
class DBClass : IDispose
{
...FileStream = null; public void Dispose()
{
if(FileStream != null)
{
this.Close();
}
}
}
你可以尝试将你的类实现IDispose接口.并实现接口中的Dispose()方法,在此方法中释放你所要释放的资源,比如说关系连接等等.
然后你用的时候
using(DBClass s = ...)
{
//你的code
}
这样using作用域结束后.会自动调用你的Dispose方法
警告:
不要对连接、DataReader 或类的 Finalize 方法中的任何其他托管对象调用 Close 或 Dispose。在终结器中,应该仅释放类直接拥有的非托管资源。如果您的类未拥有任何非托管资源,则不要在类定义中包括 Finalize 方法
析构中释放资源会有错误的,参考下面帖子:http://topic.csdn.net/u/20081119/09/72d7bcdc-7a67-41c1-8860-ca8c81e9510b.html