2012-04-07 39 views
2

可能重复:
What is the C# Using block and why should I use it?什么时候应该使用使用声明?

我将一个旧网站到C#,我不知道什么时候,我应该使用 '使用'。有没有一般的指导方针?我知道的好处,但我不是100%确定如何使用它。每次我'新'的方法/财产吗?

SqlConnection awesomeConn = new SqlConnection(connection); 
+0

首先确保你完全理解'使用'的作用,然后应该更容易。请参考此msdn页面:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx – 2012-04-07 18:53:48

回答

0

使用是一种方便,使您可以放心,你不能用了处置资源的退出块。无论何时必须在本地代码块中使用IDisposable实施者,都可以并且应该使用它。

3

MSDN

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

using语句确保即使在对象上调用方法时发生 异常,也会调用Dispose。您可以通过将对象放在try块中并且然后在finally块中调用Dispose来实现相同的结果;实际上,这是编译器如何翻译 使用语句。该代码示例 更早膨胀以在编译时下面的代码(注意额外 大括号来创建该对象的有限范围内):

实施例:

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

如果一个类实现IDisposable那么它会创建一些非托管资源,在完成使用时需要“处置”这些资源。所以,你会做这样的事情:

SqlConnection awesomeConn = new SqlConnection(connection); 

// Do some stuff 

awesomeConn.Dispose(); 

为了避免遗忘处置的源泉(在这种情况下,关闭数据库连接),特别是当一个异常被抛出时,您可以使用using语法自动调用处理时你出去using语句的范围:使用所有O

try 
{ 
    SqlConnection awesomeConn = new SqlConnection(connection); 

    // do some stuff 
} 
finally 
{ 
    awesomeConn.Dispose(); 
} 
1

用途:

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

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

相关问题