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