5

DUPE:在 C# 中使用“使用”

我见过人们使用以下内容,我想知道它的目的是什么?是不是对象在被垃圾收集使用后被销毁了?

例子:

using (Something mySomething = new Something()) {
  mySomething.someProp = "Hey";
}
4

6 回答 6

6

使用大致翻译为:

Something mySomething = new Something();
try
{
  something.someProp = "Hey";
}
finally
{
  if(mySomething != null)
  {
    mySomething.Dispose();
  }
}

差不多就是这样。目的是支持确定性处理,这是 C# 所没有的,因为它是一种垃圾收集语言。using / Disposal 模式为程序员提供了一种准确指定类型何时清理其资源的方法。

于 2009-02-18T14:54:00.267 回答
4

using 语句可确保调用 Dispose(),即使在调用对象上的方法时发生异常也是如此。

于 2009-02-18T14:53:34.713 回答
2

using 语句具有在完成 using 块时处理 () 中的任何内容的有益效果。

于 2009-02-18T14:52:36.663 回答
2

您可以usingSomething类实现IDisposable时使用。即使您在using块内遇到异常,它也可以确保正确处理对象。

即,您不必为了调用而手动处理潜在的异常Dispose,该using块会自动为您完成。

它等价于:

Something mySomething = new Something();
try
{
   // this is what's inside your using block
}
finally
{
    if (mySomething != null)
    {
        mySomething.Dispose();
    }
}
于 2009-02-18T14:53:56.007 回答
1

使用被翻译成

try
{
   ...
}
finally
{
   myObj.Dispose();
}

编译时(在 IL 中也是如此)。

所以基本上你应该将它与实现的每个对象一起使用IDisposable

于 2009-02-18T14:54:35.990 回答
0

'using' 块是一种保证在退出块时调用对象的 'dispose' 方法的方法。

它很有用,因为您可能会因为中断、返回或异常而正常退出该块。

你可以用'try/finally'做同样的事情,但是'using'可以更清楚地说明你的意思,并且不需要在块外声明的变量。

于 2009-02-18T14:54:35.990 回答