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); }

浙公网安备 33010602011771号