c#中的using构造怎么样?

时间:2010-03-30 19:56:06

标签: c# .net vb.net using

我明白这一点:

using (StreamWriter sw = new StreamWriter("file.txt"))
{
     // d0 w0rk s0n
}

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

5 个答案:

答案 0 :(得分:12)

您想查看using statement的文档(而不是关于命名空间的 using指令)。

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

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

有关语法的一些有趣内容:

  • 您可以在一个语句中获取多个资源:

    using (Stream input = File.OpenRead("input.txt"),
           output = File.OpenWrite("output.txt"))
    {
        // Stuff
    }
    
  • 您不必分配给变量:

    // For some suitable type returning a lock token etc
    using (padlock.Acquire())
    {
        // Stuff
    }
    
  • 你可以在没有牙套的情况下筑巢;方便避免缩进

    using (TextReader reader = File.OpenText("input.txt"))
    using (TextWriter writer = File.CreateText("output.txt"))
    {
        // Stuff
    }
    

答案 1 :(得分:10)

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

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

答案 2 :(得分:5)

您的问题由规范的第8.13节解答。

答案 3 :(得分:2)

在这里:http://msdn.microsoft.com/en-us/library/yh598w02.aspx

基本上,它会在使用范围的末尾自动调用IDisposable接口的Dispose成员。

答案 4 :(得分:0)

检查此Using statement