可能重复:
Which is better, and when: using statement or calling Dispose() on an IDisposable in C#?
When should I use “using” blocks in C#?
using a using if statement?
正确地说,我将如何使用using
声明?我有一个教程打开,我不明白。我可以看到超过1种不同的实现方式。哪种方式正确或偏好?
答案 0 :(得分:9)
using语句适用于任何实现IDisposable的对象。
using (var my_object = new IDisposableObject ())
{
//do my_object code here.
} //once the program reaches here, it calls my_object.Dispose();
通常,这用于具有在程序完成时手动需要处理(关闭)的连接的对象。例如,打开文件和数据库的连接。
即使代码中有错误,using语句也会调用Dispose,因此它类似于在try catch语句的finally块中调用Dispose方法。
答案 1 :(得分:1)
确保调用dispose是一种较短的语法:
using (File f = File.Open("..."))
{
}
与
相同File f;
try
{
f = File.Open("...");
}
finally
{
f.Dispose();
}
答案 2 :(得分:0)
有两种基本方法可以使用using
语句。从MSDN中的using Directive (C#)中提取。
答案 3 :(得分:0)
为了扩展Kevin的答案,using语句有效地将对象实例化包装在try / finally块中,在最后一节中调用对象Dispose()方法,即
using(myObject m = new myObjecyt())
{
// Code here
}
与
相同myObject m = new myObjecyt()
try
{
// Code here
}
finally
{
m.Dispose();
}
这可以通过检查MSIL来验证。
答案 4 :(得分:0)
“使用”关键字有助于在.net中安全,清晰地完成某件事。这是某些对象的属性处理。您可能已经了解了.Net中我们是如何进行垃圾收集的,这意味着对于许多对象,我们在使用它们时不必关心它们。然而,其他对象需要有一个名为Dispose的方法。最好的做法是,只要一个对象有一个Dispose方法,那么我们应该在完成该对象时调用该方法。
(它们通常处理unmanaged resources。这意味着它正在使用不受.NET运行时控制的内存或其他计算机部件。因此,当垃圾收集到达丢弃的.Net对象时,它无法这可能会导致内存泄漏和各种其他问题。一个很好的例子就是ADO.NET Connection对象。反复不是处理连接对象会导致数据库问题。)
Using关键字也与此“Dispose”方法相关联。更准确的说,当一个对象有一个Dispose方法时,我们要么( A 。)调用。当我们完成它时会消除,或者( B 。)将我们的代码放在使用块中。 Using块为您做了几件事:
关键是对于许多具有Dispose方法的对象,错误处理特别重要。我们的代码很多,我们不需要错误处理;发生错误的后果不是真正的问题。但对于这些IDisposable对象,错误往往是一个问题,也许是一个大问题。因此,.Net为忙碌的开发人员提供了一种语法,可以添加最基本的错误处理并继续前进。始终至少从使用块开始;也许以后你会转向更高级的错误处理,但至少你已经有了这个基本的安全性。