C#高级编程中在介绍dispose有这么一个例子: public class DataStoreConnection:IDisposable
{
private int DataStoreHandle = 0;
private bool CanOpen = true;
private readonly string name;
public DataStoreConnection(string name)
{
this.name = name;
}
public void Open()
{
if (CanOpen == false)
{
Console.WriteLine(name + "Error:Attenpt open after calling dispose!");
}
else
{
if (DataStoreHandle == 0)
{
DataStoreHandle = 1;
Console.WriteLine(name + ":connected");
}
else
{
Console.WriteLine(name + "Error:already open");
}
}
}
public void Close()
{
DataStoreHandle = 0;
} public void Dispose()
{
Console.WriteLine("Disposing:" + name);
CanOpen = false;
Close();
GC.SuppressFinalize(this);
} ~DataStoreConnection()
{
Close();
}
}这里的dispose函数中GC.SuppressFinalize(this);这个语句书上说表示让GC不要去回收了,那在调用完dispose后,程序不会删除对象了啊,还有为什么还要添加~DataStoreConnection()。本人用C++的,实在不明白继承idisposabel接口的类怎么删除对象
{
private int DataStoreHandle = 0;
private bool CanOpen = true;
private readonly string name;
public DataStoreConnection(string name)
{
this.name = name;
}
public void Open()
{
if (CanOpen == false)
{
Console.WriteLine(name + "Error:Attenpt open after calling dispose!");
}
else
{
if (DataStoreHandle == 0)
{
DataStoreHandle = 1;
Console.WriteLine(name + ":connected");
}
else
{
Console.WriteLine(name + "Error:already open");
}
}
}
public void Close()
{
DataStoreHandle = 0;
} public void Dispose()
{
Console.WriteLine("Disposing:" + name);
CanOpen = false;
Close();
GC.SuppressFinalize(this);
} ~DataStoreConnection()
{
Close();
}
}这里的dispose函数中GC.SuppressFinalize(this);这个语句书上说表示让GC不要去回收了,那在调用完dispose后,程序不会删除对象了啊,还有为什么还要添加~DataStoreConnection()。本人用C++的,实在不明白继承idisposabel接口的类怎么删除对象
解决方案 »
- 如何建立全局互斥
- 请问如何在list的一个列中根据条件显示不通颜色组成的色条?
- C# Win DataSet里的数据导入到SQL
- 选择时间的窗口是怎么实现的呀??
- 关于一个4000人同时在线的考试系统??!!!UP有分!!!
- C#的文本框无法粘贴excel单元格的内容
- C#如何对USB口进行操作?(暂时20分,如能解决问题后加200分,绝不食言!)
- ^_^今天升级了,开心放分,祝各位周末愉快 :)~~~~~~
- 菜鸟的问题:如何让 开始->文档 中不显示最近打开的文档列表?
- udp聊天程序 封装以后接受数据函数出现每个套接字地址(协议/网络地址/端口)只允许使用一次
- 请问大家在用VS2008编辑的时候,如何让方法名称高亮显示?(让方法名着色)
- [分享小技巧]如何实现自定义文件的关联文件,内详+散分
,按照C++的说法就是要内存泄露了。所以定义西够函数,就是要防止这样的万一。
托管的对象不必用户去删除,GC要去回收,除非这个GC.SuppressFinalize(this)被调用,再说了C#也没有DELETE这样的语句,要用到DISPOSE()的地方是为了使用非托管资源用的
,按照C++的说法就是要内存泄露了。所以定义西够函数,就是要防止这样的万一。
托管的对象不必用户去删除,GC要去回收,除非这个GC.SuppressFinalize(this)被调用,再说了C#也没有DELETE这样的语句,要用到DISPOSE()的地方是为了使用非托管资源用的