我见过人们使用以下内容,我想知道它的目的是什么? 这样对象在被垃圾收集使用后会被销毁吗?
示例:
using (Something mySomething = new Something()) {
mySomething.someProp = "Hey";
}
答案 0 :(得分:6)
大致使用翻译:
Something mySomething = new Something();
try
{
something.someProp = "Hey";
}
finally
{
if(mySomething != null)
{
mySomething.Dispose();
}
}
这就是它。目的是支持确定性处理,这是C#没有的东西,因为它是垃圾收集语言。 using / Disposal模式为程序员提供了一种方法,可以准确指定类型何时清理其资源。
答案 1 :(得分:4)
using语句确保即使在对象上调用方法时发生异常,也会调用Dispose()。
答案 2 :(得分:2)
使用语句具有在完成使用块时处理()中的任何内容的有益效果。
答案 3 :(得分:2)
Something
类实现using
时,您可以使用IDisposable。即使您在using
块中遇到异常,它也可确保正确放置对象。
即,您不必手动处理潜在的异常只是为了调用Dispose
,using
块会自动为您执行此操作。
相当于:
Something mySomething = new Something();
try
{
// this is what's inside your using block
}
finally
{
if (mySomething != null)
{
mySomething.Dispose();
}
}
答案 4 :(得分:1)
使用获取翻译成
try
{
...
}
finally
{
myObj.Dispose();
}
编译时(所以在IL中)。
所以基本上你应该将它与每个实现IDisposable
的对象一起使用。
答案 5 :(得分:0)
'using'块是一种保证在退出块时调用对象的'dispose'方法的方法。
这很有用,因为您可能会正常退出该块,因为您已经退出,或者因为异常而退出该块。
你可以用'try / finally'做同样的事情,但'using'会让你更清楚你的意思,并且不需要在块之外声明的变量。