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
using语句详解
443

被折叠的 条评论
为什么被折叠?



