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