可能重复:
什么是 C# Using 块,我为什么要使用它?
我正在将旧网站转换为 C#,但我不确定何时应该使用“使用”。有没有一般的指导方针?我知道好处,但我不是 100% 确定如何使用它。每次我“新”一个方法/属性时都是这样吗?
SqlConnection awesomeConn = new SqlConnection(connection);
可能重复:
什么是 C# Using 块,我为什么要使用它?
我正在将旧网站转换为 C#,但我不确定何时应该使用“使用”。有没有一般的指导方针?我知道好处,但我不是 100% 确定如何使用它。每次我“新”一个方法/属性时都是这样吗?
SqlConnection awesomeConn = new SqlConnection(connection);
如果一个类实现了IDisposable
,那么它将创建一些非托管资源,当您完成使用它们时需要“处置”它们。所以你会做这样的事情:
SqlConnection awesomeConn = new SqlConnection(connection);
// Do some stuff
awesomeConn.Dispose();
为了避免忘记释放资源(在这种情况下关闭数据库连接),尤其是在抛出异常时,您可以使用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
其实 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,除非它们的生命周期超出当前执行范围(即方法调用)。在这种情况下,例如,如果您有一个一次性成员变量,那么包含类应该在其 Dispose 中实现 IDisposable 和 Dispose 成员。
如果您想自动处置对象,则经常使用它。否则你必须手动调用 myobj.Dispose() 。
请参阅此处的参考文档:http: //msdn.microsoft.com/en-us/library/yh598w02.aspx
Using 是一种方便,它允许您确保在不处理资源的情况下无法退出块。每当您必须在本地代码块中使用 IDisposable 实现程序时,都可以并且应该使用它。