首先在using语句内初始化一个对象,并将其引用保存在一个变量中。然后在和using语句匹配的大括号内访问该变量。编译这段代码时,编译器会自动产生一个try块和一个finally块。在finally块中,编译器会产生代码将变量转型为一个IDisposable接口,并调用该接口上的Dispose方法。很明显,using语句只能用于那些实现了IDisposable接口的类型。
C#的using语句支持初始化多个变量,只要这些变量的类型相同。
using语句同样也可以在实现了IDisposable接口的值类型中应用。
如果在using代码块中抛出异常,资源还是会被清理的,这是由于using被编译成一个try块和finally块,资源清理在finally中执行。