using System;
public class MyClass : IDisposable
{
// 资源句柄
private IntPtr nativeResource = Marshal.AllocHGlobal(100);
// 是否已经释放资源的标记
private bool disposed = false;
// 实现IDisposable接口
public void Dispose()
{
// 释放资源并抑制终结
Dispose(true);
GC.SuppressFinalize(this);
}
// 保护性Dispose模式
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放托管资源
// 例如:关闭文件流、数据库连接等
}
// 释放非托管资源
Marshal.FreeHGlobal(nativeResource);
disposed = true;
}
}
// 析构函数
~MyClass()
{
// 不要重新抛出异常,因为析构函数中抛出异常会导致不确定的行为
Dispose(false);
}
}
// 使用示例
public class Program
{
public static void Main()
{
using (MyClass myObject = new MyClass())
{
// 使用myObject
}
// myObject.Dispose() 会自动调用
}
}
IDisposable
接口包含一个方法Dispose()
,用于释放资源。实现该接口的类可以确保资源在不再需要时被正确释放。Dispose()
方法用于释放托管和非托管资源。通过调用Dispose(true)
,可以在释放托管资源的同时抑制垃圾回收器的终结操作。disposing
参数指示是否应该释放托管资源。Dispose()
,则在对象被垃圾回收时会调用析构函数,进而调用Dispose(false)
来释放非托管资源。using
语句确保实现了IDisposable
接口的对象在其作用域结束时自动调用Dispose()
方法,从而确保资源及时释放。上一篇:c# 向下取整
下一篇:c# using用法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站