首先说一下资源的分类:
托管资源:由CLR管理分配和释放资源
非托管资源:不受CLR管理的对象,如 文件(StreamReader,BinaryReader,DataTable,各种Stream类),Socket,COM,数据库连接
实际应用:
在处理网络,文件相关的地方,经常用到using语法糖。
文件处理类,网络类 等等都已继承了IDisposable
(没有实现IDisposable不能使用using语法糖)
class Program { static void Main(string[] args) { using (var mydis = new MyDisposable()) { Console.WriteLine(1); } Console.WriteLine(2); //输出:1,0,2 //没有继承IDisposable,不能使用此语法 //using (var tab = new TabClass()) //{ //} } } public class MyDisposable:IDisposable { /// <summary> /// TODO 释放资源 /// </summary> public void Dispose() { Console.WriteLine(0); } } public class TabClass { public void Close() { } }
using实质
使用ildasm.exe来查看using,using语法会被解析成try-finally语句,也就是using(){}语法结束时会自动调用Dispose方法释放非托管资源