using System;
namespace UsingStatementExample
{
class Program
{
static void Main(string[] args)
{
// 使用 using 语句确保资源被正确释放
using (MyResource myResource = new MyResource())
{
myResource.DoSomething();
}
Console.WriteLine("Resource has been disposed.");
}
}
// 自定义资源类,实现 IDisposable 接口
public class MyResource : IDisposable
{
private bool disposed = false;
public void DoSomething()
{
Console.WriteLine("Doing something...");
}
// 实现 IDisposable 接口
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// 释放托管资源
Console.WriteLine("Disposing managed resources.");
}
// 释放非托管资源
Console.WriteLine("Disposing unmanaged resources.");
disposed = true;
}
}
// 析构函数
~MyResource()
{
Dispose(false);
}
}
}
using
语句:using
语句确保实现了 IDisposable
接口的对象在使用完毕后会被正确释放。它会在代码块结束时自动调用对象的 Dispose
方法。
MyResource
类:这是一个自定义的资源类,实现了 IDisposable
接口。DoSomething
方法模拟了资源的使用,而 Dispose
方法则负责清理资源。
Dispose
方法:Dispose
方法用于释放资源。Dispose(bool disposing)
是一个虚方法,允许派生类覆盖以添加额外的清理逻辑。GC.SuppressFinalize(this)
告诉垃圾回收器不需要再调用析构函数。
析构函数:析构函数用于在对象被垃圾回收时进行最后的清理工作。它会调用 Dispose(false)
来确保非托管资源被释放。
通过这种方式,using
语句可以确保资源在使用完毕后被及时释放,避免资源泄漏。
上一篇:c#mqtt
下一篇:c# 定义常量
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站