关于以下代码:
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
code...
}
SqlConnection是否使用“using”初始化,因此在括号后取消引用/销毁?
请在必要时更正我的提问。
答案 0 :(得分:8)
using
是在对象上正确调用Dispose()
的语法快捷方式。
在大括号中的代码执行完毕后,Dipose()
语句中包含的对象会自动调用using
。
在编译时,您的上述代码实际上将扩展为
{
SqlConnection sqlConnection = new SqlConnection(connectionString);
try
{
// .. code
}
finally
{
if (sqlConnection!= null)
((IDisposable)sqlConnection).Dispose();
}
}
你可以看到它是如何方便的捷径。
答案 1 :(得分:6)
是。 using语句只是语法糖,并由编译器翻译成类似
的内容SqlConnection sqlConnection;
try
{
sqlConnection = new SqlConnection(connectionString);
// code...
}
finally
{
if (sqlConnection != null)
sqlConnection.Dispose();
}
答案 2 :(得分:2)
using是一种语言结构,它采用IDisposable并在其上调用Dispose()。
所以
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
code...
}
大致等同于
SqlConnection sqlConnection = null;
try {
sqlConnection = new SqlConnection(connectionString));
code ...
} finally {
if(sqlConnection != null) sqlConnection.Dispose();
}
答案 3 :(得分:0)
当sqlConnection
变量超出范围时(在括号内的结尾处),将自动调用Dispose()
方法。
答案 4 :(得分:0)
在using语句之后,它将退出它可用的作用域。将调用Dispose方法对象,但此时对象不一定是垃圾回收。
所以这意味着如果你在对象的Dispose()方法中有清理过的项目(文件关闭等),它们将在using语句结束后立即清理。如果你有一个终结器(~WourClassName)除此之外做其他事情,你不能保证那时会被调用。