c# 中的 using 结构怎么样?

发布于 2024-08-27 03:24:20 字数 169 浏览 7 评论 0原文

我看到了这一点:

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

我尝试查找信息的所有内容都没有解释它在做什么,而是为我提供了有关名称空间的内容。

I see this:

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

Everything I try to find info on is does not explain what this doing, and instead gives me stuff about namespaces.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

泪是无色的血 2024-09-03 03:24:20

您想要查看 using 语句< /a> (而不是关于命名空间的 using 指令)。

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

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

关于语法的一些有趣的地方:

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

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

    // 对于某些合适的类型,返回锁定令牌等
    使用 (挂锁.Acquire())
    {
        // 东西
    }
    
  • 您可以不用大括号嵌套它们;方便避免缩进

    using (TextReader reader = File.OpenText("input.txt"))
    使用 (TextWriter writer = File.CreateText("output.txt"))
    {
        // 东西
    }
    

You want to check out documentation for the using statement (instead of the using directive which is about namespaces).

Basically it means that the block is transformed into a try/finally block, and sw.Dispose() gets called in the finally block (with a suitable nullity check).

You can use a using statement wherever you deal with a type implementing IDisposable - and usually you should use it for any disposable object you take responsibility for.

A few interesting bits about the syntax:

  • You can acquire multiple resources in one statement:

    using (Stream input = File.OpenRead("input.txt"),
           output = File.OpenWrite("output.txt"))
    {
        // Stuff
    }
    
  • You don't have to assign to a variable:

    // For some suitable type returning a lock token etc
    using (padlock.Acquire())
    {
        // Stuff
    }
    
  • You can nest them without braces; handy for avoiding indentation

    using (TextReader reader = File.OpenText("input.txt"))
    using (TextWriter writer = File.CreateText("output.txt"))
    {
        // Stuff
    }
    
起风了 2024-09-03 03:24:20

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

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

The using construct is essentially a syntactic wrapper around automatically calling dispose on the object within the using. For example your above code roughly translates into the following

StreamWriter sw = new StreamWriter("file.text");
try {
  // do work 
} finally {
  if ( sw != null ) {
    sw.Dispose();
  }
}
站稳脚跟 2024-09-03 03:24:20

规范第 8.13 节回答了您的问题。

Your question is answered by section 8.13 of the specification.

私野 2024-09-03 03:24:20

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

基本上,它会在 using 作用域末尾自动调用 IDisposable 接口的 Dispose 成员。

Here you go: http://msdn.microsoft.com/en-us/library/yh598w02.aspx

Basically, it automatically calls the Dispose member of an IDisposable interface at the end of the using scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文