C#函数制作Dispose
时间: 2023-11-15 18:04:08 浏览: 80
在 C# 中,实现 `IDisposable` 接口可以让对象在被使用完毕后进行资源释放。下面是一个示例:
```csharp
using System;
class MyClass : IDisposable
{
private bool disposed = false;
// 执行资源清理的方法
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放托管资源
}
// 释放非托管资源
disposed = true;
}
}
// 实现 IDisposable 接口
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
// 析构函数
~MyClass()
{
Dispose(false);
}
}
```
在上面的示例中,`Dispose` 方法是实现资源清理的关键所在。`Dispose` 方法接收一个布尔类型的参数 `disposing`,用于判断是否需要释放托管资源。当 `disposing` 为 `true` 时,表示需要释放托管资源和非托管资源,这是在调用 `Dispose` 方法时常用的方式;当 `disposing` 为 `false` 时,表示只需要释放非托管资源,这是在析构函数中常用的方式。
在 `Dispose` 方法中,判断当前对象是否已经释放过资源,如果没有释放过,则根据 `disposing` 的值释放资源,并将 `disposed` 标记为 `true`,表示对象已经被释放过。同时,在 `Dispose` 方法中还调用了 `GC.SuppressFinalize` 方法,表示不再调用对象的析构函数。
在类中实现 `IDisposable` 接口后,使用该类时,应该在使用完该对象之后调用 `Dispose` 方法来释放资源。也可以使用 `using` 语句来自动释放资源,如下所示:
```csharp
using (var obj = new MyClass())
{
// 使用 obj 对象
}
```
阅读全文