using

底层原理: using 语句实际上是一个 try...finally 的语法糖,它保证即使在 using 块内发生异常,资源的 Dispose() 方法也会被调用。

// 编译器会将上面的 using 语句转换为类似如下的结构:
StreamReader reader = new StreamReader("file.txt");
try
{
    string content = reader.ReadToEnd();
}
finally
{
    if (reader != null)
        ((IDisposable)reader).Dispose();
}

 使用前提: 与 using 语句一起使用的类型必须实现 System.IDisposable 接口。几乎所有的 .NET 标准库中涉及 I/O、网络、数据库、图形等操作的类都实现了此接口。

// 实现 IDisposable 接口的简单示例
public class MyResource : IDisposable
{
    private bool _disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this); // 告诉垃圾回收器不再需要调用终结器
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!_disposed)
        {
            if (disposing)
            {
                // 在这里释放托管资源(其他 IDisposable 对象)
            }
            // 在这里释放非托管资源(例如文件句柄、指针)
            _disposed = true;
        }
    }
    // 可选:终结器(析构函数),作为最后的安全网
    ~MyResource() => Dispose(false);
}

 

posted @ 2025-12-25 09:29  家煜宝宝  阅读(2)  评论(0)    收藏  举报