我什么时候应该使用using语句?

可能重复:
什么是C#Using块,我为什么要使用它?

我正在将旧网站转换为C#,我不确定何时应该使用’使用’。 有没有一般指导方针? 我知道它的好处,但我并不是100%确定如何使用它。 是每次我’新’的方法/财产?

SqlConnection awesomeConn = new SqlConnection(connection); 

如果一个类实现了IDisposable那么它将创建一些非托管资源,当你使用它们时需要将它们“处理掉”。 所以你会做类似的事情:

 SqlConnection awesomeConn = new SqlConnection(connection); // Do some stuff awesomeConn.Dispose(); 

为了避免忘记处理资源(在这种情况下关闭数据库连接),尤其是在抛出exception时,您可以使用using语法在您退出using语句的范围时自动调用dispose:

 using (SqlConnection awesomeConn = new SqlConnection(connection)) { // Do some stuff } // automatically does the .Dispose call as if it was in a finally block 

实际上,使用块相当于:

 try { SqlConnection awesomeConn = new SqlConnection(connection); // do some stuff } finally { awesomeConn.Dispose(); } 

MSDN

通常, 当您使用IDisposable对象时,您应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法 ,并且(如前所示使用它时)一旦调用Dispose ,它也会导致对象本身超出范围。 在using块中,该对象是只读的,不能修改或重新分配。

using语句确保即使在对象上调用方法时发生exception,也会调用Dispose。 您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句。 之前的代码示例在编译时扩展为以下代码(请注意额外的花括号以创建对象的有限范围):

例:

 using (StreamReader stream = new StreamReader("path")) { string line = stream.ReadLine(); } 

对实例化IDisposable实例化的所有对象使用,除非它们的生命周期超出当前执行范围(即方法调用)。 在这种情况下,例如,如果您有一个一次性成员变量,那么包含类应该在其Dispose中实现IDisposable和Dispose成员。

如果要自动处理对象,通常会使用它。 否则你必须手动调用myobj.Dispose()。

请参阅此处的参考文档: http : //msdn.microsoft.com/en-us/library/yh598w02.aspx

使用是一种便利,可以确保您不会在不处理资源的情况下退出块。 只要您必须在本地代码块中使用IDisposable实现程序,就可以并且应该使用它。