class FileDealer: IDisposable
{
//定义一个访问文件资源的Win32句柄
private IntPtr fileHandle;
//定义引用的托管资源
private ManagedRes managedRes;
//定义构造器,初始化托管资源和非托管资源
public FileDealer(IntPtr handle, ManagedRes res)
{
fileHandle = handle;
managedRes = res;
}
//实现终结器,定义Finalize
~FileDealer()
{
if (fileHandle != IntPtr.Zero)
{
Dispose(false);
}
}
//实现IDisposable接口
public void Dispose()
{
Dispose(true);
//阻止GC调用Finalize方法
GC.SuppressFinalize(this);
}
//实现一个处理资源清理的具体方法
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//清理托管资源
managedRes.Dispose();
}
//执行资源清理,在此为关闭对象句柄
if (fileHandle != IntPtr.Zero)
{
CloseHandle(fileHandle);
fileHandle = IntPtr.Zero;
}
}
public void Close()
{
//在内部调用Dispose来实现
Dispose();
}
//实现对文件句柄的其他应用方法
public void Write() { }
public void Read() { }
//引入外部Win32API
[DllImport("Kernel32")] private extern static Boolean CloseHandle(IntPtr handle);
}
最佳 .NET 资源清理策略
最新推荐文章于 2018-08-03 10:49:00 发布