using System;
public class DisposableResource : IDisposable
{
// 假设这是需要释放的非托管资源
private IntPtr nativeResource = Marshal.AllocHGlobal(100);
// 标记对象是否已被释放
private bool disposed = false;
// 实现IDisposable接口
public void Dispose()
{
// 调用Dispose方法并传递true,表示已手动调用Dispose
Dispose(true);
// 抑制垃圾回收器终结操作
GC.SuppressFinalize(this);
}
// 释放资源的方法
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放托管资源
// 例如:关闭文件流、网络连接等
}
// 释放非托管资源
Marshal.FreeHGlobal(nativeResource);
disposed = true;
}
}
// 析构函数,确保在未显式调用Dispose时也能释放资源
~DisposableResource()
{
// 调用Dispose方法并传递false,表示未手动调用Dispose
Dispose(false);
}
}
// 使用示例
public class Program
{
public static void Main()
{
using (var resource = new DisposableResource())
{
// 使用资源
}
// 此处资源已自动释放
}
}
IDisposable 接口:
IDisposable 接口包含一个 Dispose 方法,用于释放资源。实现该接口的对象可以确保其占用的资源(尤其是非托管资源)能够及时释放。Dispose 方法:
Dispose 方法是 IDisposable 接口的一部分,用于释放托管和非托管资源。Dispose(bool disposing) 是一个受保护的虚方法,允许派生类重写以释放特定资源。disposing 参数为 true 表示已显式调用 Dispose,为 false 表示正在通过析构函数进行清理。GC.SuppressFinalize(this):
析构函数:
Dispose,则析构函数会确保资源被释放。它调用 Dispose(false),因为此时托管资源可能已经被回收。using 语句:
using 语句确保在代码块结束时自动调用 Dispose 方法,即使发生异常也能保证资源被正确释放。上一篇:c# list
下一篇:c# console
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站