在.Net做"使用"做我们被认为是做的事情吗?

Ash*_*Ash 2 .net

我最近正在阅读一个论坛,看到这个评论:

所以,你看到你已经被骗了,相信'使用'语法将帮助你清理你的资源.哦,欢迎来到.NET开发.

这真让我吓坏了!在几乎所有情况下(特别是流),我几乎只使用.Dispose().没有人告诉我,"使用"是否有一些奇怪的事情?使用是好是坏还是无动于衷?

Szy*_*zga 15

来自MSDN:

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}
Run Code Online (Sandbox Code Playgroud)

由编译器翻译成以下内容:

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)

所以不确定你在担心什么.

编辑:但是请注意,如果您在自己的类型上使用使用模式,则模式将仅与Dispose()方法一样有效.一些评论和其他答案.

  • 演员怎么会失败?C#将不允许您编译包含未实现IDisposable的变量的using()语句. (3认同)

Jon*_*ill 7

在某些情况下,使用不会像您预期的那样进行清理,例如:

using (var myObject = new DisposableObject().AnotherDisposable())
{
    //Do things to myObject
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,你有两个对象,DisposableObject和AnotherDisposable,using只会清理AnotherDisposable并让DisposableObject泄漏.

  • 呃:我认为这是一种代码味道,因为你不应该在没有处理的情况下创造一次性物品.充其量,这是误导.这会更好,因为它将同时获得:using(var parent = new DisposableObject(),myObject = parent.AnotherDisposable()){} (2认同)