可能重复:
What is the C# Using block and why should I use it?什么时候应该使用使用声明?
我将一个旧网站到C#,我不知道什么时候,我应该使用 '使用'。有没有一般的指导方针?我知道的好处,但我不是100%确定如何使用它。每次我'新'的方法/财产吗?
SqlConnection awesomeConn = new SqlConnection(connection);
可能重复:
What is the C# Using block and why should I use it?什么时候应该使用使用声明?
我将一个旧网站到C#,我不知道什么时候,我应该使用 '使用'。有没有一般的指导方针?我知道的好处,但我不是100%确定如何使用它。每次我'新'的方法/财产吗?
SqlConnection awesomeConn = new SqlConnection(connection);
如果您想自动处理对象,通常会使用它。否则,你必须手动调用myobj.Dispose()。
见参考documentiation这里:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
使用是一种方便,使您可以放心,你不能用了处置资源的退出块。无论何时必须在本地代码块中使用IDisposable实施者,都可以并且应该使用它。
MSDN:
作为一项规则,当您使用IDisposable的对象,还应当声明并 它实例在using语句。 using语句以正确的方式在对象上调用 Dispose方法,以及(如前所示使用它时 ),一旦Dispose被调用,它也会导致对象本身超出范围 。在使用块中,对象是 只读,不能被修改或重新分配。
using语句确保即使在对象上调用方法时发生 异常,也会调用Dispose。您可以通过将对象放在try块中并且然后在finally块中调用Dispose来实现相同的结果;实际上,这是编译器如何翻译 使用语句。该代码示例 更早膨胀以在编译时下面的代码(注意额外 大括号来创建该对象的有限范围内):
实施例:
using (StreamReader stream = new StreamReader("path"))
{
string line = stream.ReadLine();
}
如果一个类实现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();
}
用途:
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成员。
首先确保你完全理解'使用'的作用,然后应该更容易。请参考此msdn页面:http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx – 2012-04-07 18:53:48