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接口的类怎么删除对象
解决方案 »
- VS IDE中很不解的一个问题(Debug)
- 在WinFrom开发中使用删除Ribbon控件是出现“将对象设置引用到对象的实例”错误
- 文件缓存的问题
- 第三次问这个问题,socket的奇怪现象
- 求教:DBF文件是用Delphi写的,用C#打开后,其中的中文全部变为(似日文),而Excel打开却没有问题,何解?
- 求利用ICSharpCode.SharpZipLib解压缩文件夹的代码
- 正则表达式与搜索
- 关于C#调用C++问题
- 诸位,我想请教一个正则表达式
- C#做网络管理软件,用什么协议好,大家给些建议
- 请问大家在用VS2008编辑的时候,如何让方法名称高亮显示?(让方法名着色)
- [分享小技巧]如何实现自定义文件的关联文件,内详+散分
,按照C++的说法就是要内存泄露了。所以定义西够函数,就是要防止这样的万一。
托管的对象不必用户去删除,GC要去回收,除非这个GC.SuppressFinalize(this)被调用,再说了C#也没有DELETE这样的语句,要用到DISPOSE()的地方是为了使用非托管资源用的
,按照C++的说法就是要内存泄露了。所以定义西够函数,就是要防止这样的万一。
托管的对象不必用户去删除,GC要去回收,除非这个GC.SuppressFinalize(this)被调用,再说了C#也没有DELETE这样的语句,要用到DISPOSE()的地方是为了使用非托管资源用的