using
语句获取一个或多个资源,执行一个语句,然后处置该资源。
-
using-statement:(using 语句:)
- using ( resource-acquisition ) embedded-statement(using ( 资源获取 ) 嵌入语句) resource-acquisition:(资源获取:)
-
local-variable-declaration(局部变量声明)
expression(表达式)
一个资源是实现了 System.IDisposable
的类或结构,它只包含一个名为 Dispose
的不带参数的方法。正在使用资源的代码可以调用 Dispose
以表明不再需要该资源。如果不调用 Dispose
,则最终将因为垃圾回收而对该资源进行自动处置。
如果资源获取的形式是局部变量声明,那么此局部变量声明的类型必须为 System.IDisposable
或是可以隐式转换为 System.IDisposable
的类型。如果资源获取的形式是表达式,那么此表达式必须是 System.IDisposable
类型或是可以隐式转换为 System.IDisposable
的类型。
在资源获取中声明的局部变量必须是只读的,且必须包含一个初始值设定项。如果嵌入语句试图修改这些局部变量(通过赋值或 ++ 和 -- 运算符)或将它们作为 ref
或 out
参数传递,则将发生编译时错误。
using
语句被翻译成三个部分:获取、使用和处置。资源的使用部分被隐式封闭在一个含有 finally
子句的 try
语句中。此 finally
子句用于处置资源。如果所获取资源是 null
,则不会对 Dispose
进行调用,也不会引发任何异常。
下列形式的 using
语句
对应于下列两个可能的扩展中的一个。当 ResourceType
是值类型时,扩展为
否则,当 ResourceType
是引用类型时,扩展为
在上面任何一种扩展中,resource
变量在嵌入语句中都是只读的。
下列形式的 using
语句
同样具有上述两种可能的扩展,但在这种情况下 ResourceType
隐式地为 expression
的编译时类型,而 resource
变量在嵌入语句中既不可访问,也不可见。
如果资源获取采用局部变量声明的形式,则有可能获取给定类型的多个资源。下列形式的 using
语句
完全等效于嵌套 using
语句的序列:
下面的示例创建一个名为 log.txt
的文件并将两行文本写入该文件。然后该示例打开这个文件进行读取,并将它所包含的文本行复制到控制台。
由于 TextWriter
和 TextReader
类实现了 IDisposable
接口,因此该示例可以使用 using
语句以确保所涉及的文件在写入或读取操作后正确关闭。
转:http://msdn.microsoft.com/zh-cn/library/aa664736(VS.71).aspx