示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test9
{
class Program
{
static void Main(string[] args)
{
Test t = new Test();
using (t)
{
Console.WriteLine("using");
}//离开using会自动调用Dispose()
Console.WriteLine("end");
Console.Read();
}
}
public class Test : IDisposable
{
protected bool disposed;
public void Dispose()
{
Console.WriteLine("Dispose()");
//这里手动释放所有资源(托管资源、非托管资源)
Dispose(true);
//告诉GC,销毁此对象时不要再调用终结器方法.因为资源已经在上面手动释放(托管资源、非托管资源)了.
GC.SuppressFinalize(this);
}
public virtual void Dispose(bool disposeManagedResources)
{
if (!disposed)
{
if (disposeManagedResources)
{
//TODO:: 释放拖管资源
}
//TODO:: 释放非托管资源
disposed = true;
}
}
//终结器方法(用来释放非托管资源)
~Test()
{
Console.WriteLine("Finalize");
Dispose(false);
}
}
}
运行测试