class MyReSourceWrapper:IDisposable
{
private bool disposed = false;
~MyReSourceWrapper()
{
//在这里清除非托管资源
CleanUp(false);
Console.WriteLine("******* In Finalize!*******");//仅仅为了测试
//不要调用任何对象的Dispose()
}
public void Dispose()
{
//在这里清除资源
CleanUp(true);
Console.WriteLine("******* In Dispise!*******");//仅仅为了测试
//如果用户调用Dispose()就不需要终结,因此跳过终结
System.GC.SuppressFinalize(this);
}
private void CleanUp(bool disposing)
{
//保证还没有被处置
if (!this.disposed)
{
if (disposing)
{
//释放托管的资源
}
//释放非托管资源
}
this.disposed = true;
}
}
class Program
{
static void Main(string[] args)
{
MyReSourceWrapper rw1 = new MyReSourceWrapper();
rw1.Dispose();//手动调用Dispose(),这不会调用终结器
using (MyReSourceWrapper rw2 = new MyReSourceWrapper())
{ }//当使用支持IDisposable接口的.net类型时,这个句法结构将保证退出Using块时,
//“正在使用的”对象将自动调用Dispose()方法
MyReSourceWrapper rw3 = new MyReSourceWrapper();
}
}