c#中的using构造怎么样?

y2k*_*y2k 3 .net c# vb.net using

我看到了这个:

using (StreamWriter sw = new StreamWriter("file.txt"))
{
     // d0 w0rk s0n
}
Run Code Online (Sandbox Code Playgroud)

我尝试查找信息的所有内容都没有解释这是做什么的,而是给了我关于命名空间的东西.

Jon*_*eet 12

您想查看using语句的文档(而不是有关命名空间的using指令).

基本上它意味着块被转换为try/ finally块,并sw.Dispose()在finally块中被调用(具有适当的无效性检查).

您可以在任何处理类型实现的地方使用using语句IDisposable- 通常您应该将它用于您负责的任何一次性对象.

关于语法的几个有趣的部分:

  • @Joshua:范围定义了最小生命周期,而不是最大生命周期.这是一种垃圾收集的语言; 收藏家可以在任何时候感觉到. (4认同)
  • @Joshua:要自己清理 - 例如,你不想留下打开的文件句柄. (3认同)
  • 实现`IDisposable`的任何东西都有资格作为其中一个地方;) (3认同)

Jar*_*Par 10

using构造本质上是一个语法包装器,可以自动调用使用中对象上的dispose.例如,您的上述代码大致可转换为以下内容

StreamWriter sw = new StreamWriter("file.text");
try {
  // do work 
} finally {
  if ( sw != null ) {
    sw.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ert 5

您的问题由规范的第8.13节回答.

  • 哈哈.我正打算回答一个无益的答案,但后来我发现它是谁.我想你可以放弃这样的答案. (4认同)
  • C#3规范:http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc (3认同)