【问题标题】:When should I use the using Statement? [duplicate]什么时候应该使用 using 语句? [复制]
【发布时间】:2012-04-20 21:20:11
【问题描述】:
【问题讨论】:
标签:
c#
.net
using-statement
【解决方案1】:
如果一个类实现了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();
}
【解决方案2】:
MSDN:
作为一项规则,当您使用 IDisposable 对象时,您应该声明并
在 using 语句中实例化它。 using 语句调用
以正确的方式处理对象上的方法,以及(当你使用它时
如前所示)它还会导致对象本身超出范围
一旦调用 Dispose。在 using 块中,对象是
只读,不能修改或重新分配。
using 语句确保 Dispose 被调用,即使
当您在对象上调用方法时发生异常。您可以
通过将对象放在 try 块中来实现相同的结果,然后
然后在 finally 块中调用 Dispose;事实上,这就是
using 语句由编译器翻译。代码示例
早期在编译时扩展为以下代码(注意额外的
花括号为对象创建有限的范围):
例子:
using (StreamReader stream = new StreamReader("path"))
{
string line = stream.ReadLine();
}
【解决方案3】:
使用 using 用于您实例化的所有实现 IDisposable 的对象,除非它们的生命周期超出当前执行范围(即方法调用)。在这种情况下,例如,如果您有一个一次性成员变量,那么包含类应该在其 Dispose 中实现 IDisposable 和 Dispose 成员。
【解决方案5】:
使用是一种方便,可让您确保在不处置资源的情况下无法退出块。每当您必须在本地代码块中使用 IDisposable 实现者时,都可以并且应该使用它。