可能是重复问题:
C#中的Using块是什么,我为什么要使用它?
我正在将一个旧站点转换为C#,但我不确定何时应该使用'using'。 有没有一般的指导方针? 我知道它的好处,但我不确定如何使用它。 每次我'new'一个方法/属性时都需要使用吗?
SqlConnection awesomeConn = new SqlConnection(connection);
可能是重复问题:
C#中的Using块是什么,我为什么要使用它?
我正在将一个旧站点转换为C#,但我不确定何时应该使用'using'。 有没有一般的指导方针? 我知道它的好处,但我不确定如何使用它。 每次我'new'一个方法/属性时都需要使用吗?
SqlConnection awesomeConn = new SqlConnection(connection);
IDisposable
接口,那么它将创建一些需要在使用完毕后进行“处理”的非托管资源。因此,您需要执行以下操作:SqlConnection awesomeConn = new SqlConnection(connection);
// Do some stuff
awesomeConn.Dispose();
using (SqlConnection awesomeConn = new SqlConnection(connection))
{
// Do some stuff
} // automatically does the .Dispose call as if it was in a finally block
实际上,using 块等同于:
try
{
SqlConnection awesomeConn = new SqlConnection(connection);
// do some stuff
}
finally
{
awesomeConn.Dispose();
}
MSDN:
使用 IDisposable 对象时,您应该在 using 语句中声明并实例化它。using 语句正确地调用对象的 Dispose 方法,并且(在以前所示的方式使用它时)还会导致对象本身在调用 Dispose 后立即超出范围。在 using 块内,对象是只读的,不能修改或重新分配。
即使在调用对象方法时发生异常,using 语句也确保调用了 Dispose。 您可以通过将对象放入 try 块中并在 finally 块中调用 Dispose 来实现相同的结果;实际上,这就是编译器如何将 using 语句转换的方式。编译时,代码示例最初扩展为以下代码(注意额外的花括号,以创建对象的有限作用域):
示例:
using (StreamReader stream = new StreamReader("path"))
{
string line = stream.ReadLine();
}
对于所有实现IDisposable接口的对象,除非它们的生命周期超出当前执行范围(例如方法调用),否则请使用using。在这种情况下,例如如果您有一个可处理的成员变量,则包含该变量的类应该实现IDisposable并在其Dispose中处理成员变量。
如果您想自动处理对象,通常会使用它。否则,您必须手动调用myobj.Dispose()。
请参阅此处的参考文档:http://msdn.microsoft.com/en-us/library/yh598w02.aspx
使用using语句是一种方便的方式,可以确保您在不处理资源的情况下无法退出块。每当您必须在本地代码块中使用IDisposable实现者时,都应该使用它。