.net 使用的目的是什么?

.net 使用的目的是什么?,.net,using-statement,.net,Using Statement,复制: 我看到人们使用下面的方法,我想知道它的目的是什么? 对象在被垃圾收集使用后是否会被销毁 例如: using (Something mySomething = new Something()) { mySomething.someProp = "Hey"; } using语句具有在您完成using块时处理()中的任何内容的有益效果。using语句确保即使在您调用对象上的方法时发生异常,也会调用Dispose()。您可以在某个类实现时使用。它确保即使使用块在中遇到异常,也能正确地处理对

复制:

我看到人们使用下面的方法,我想知道它的目的是什么? 对象在被垃圾收集使用后是否会被销毁

例如:

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

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

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

您可以在
某个
类实现时使用。它确保即使使用
块在
中遇到异常,也能正确地处理对象

也就是说,您不必手动处理潜在的异常,只需调用
Dispose
using
块就会自动为您处理

这相当于:

Something mySomething = new Something();
try
{
   // this is what's inside your using block
}
finally
{
    if (mySomething != null)
    {
        mySomething.Dispose();
    }
}

粗略地说,使用转换为:

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

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

使用会被翻译成

try
{
   ...
}
finally
{
   myObj.Dispose();
}
编译时(在IL中也是如此)


因此,基本上,您应该将它用于实现IDisposable的每个对象。
IDisposable

使用块是一种确保在退出块时调用对象的“dispose”方法的方法

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


你可以用“try/finally”做同样的事情,但是“using”可以让你的意思更清楚,不需要在th block之外声明变量。

通过简单的谷歌搜索和MSDN文档也可以找到它的副本。@Charles:这里根本不欢迎GIYF的答案。我同意rich,我们不允许IRC的精英主义态度。任何问题都可以,除了这是一个骗局。@Simucal,@Rich B-重新阅读我的评论后,我可以理解它是如何被误读的。我的评论是真诚的。@Randolpho,不完全是。对象在try…finally块之外实例化。如果对象实例化失败,那么它就不能/不需要被处理。@Randolpho,生成的IL也会在尝试调用Dispose之前检查对象是否为null。卢克,这很好。我用“粗略地”写了序言,记得吗@Randolpho,我不是想挑三拣四,我只是想指出一点,因为你的答案目前是最受欢迎的,所以很多人最终可能会读到它。:)嗯,我已经改正了。不过,我更感兴趣的是用我的帖子来解释目的和背景,因为人们经常忽略这一点。