[英]C#: Initializing a variable with “using”
关于以下代码:
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
code...
}
SqlConnection是否使用“using”初始化,因此在括号后取消引用/销毁?
请在必要时更正我的提问。
using
是一个语法快捷方式,用于正确调用对象上的Dispose()
。
在大括号中的代码执行完毕后,将在using
语句中包含的对象上自动调用Dipose()
。
在编译时,上面的代码实际上将扩展为
{
SqlConnection sqlConnection = new SqlConnection(connectionString);
try
{
// .. code
}
finally
{
if (sqlConnection!= null)
((IDisposable)sqlConnection).Dispose();
}
}
你可以看到它是一个方便的快捷方式。
是。 using语句只是语法糖,并由编译器翻译成类似的东西
SqlConnection sqlConnection;
try
{
sqlConnection = new SqlConnection(connectionString);
// code...
}
finally
{
if (sqlConnection != null)
sqlConnection.Dispose();
}
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();
}
当sqlConnection
变量超出范围时(在括号内的块的末尾),将自动调用Dispose()
方法。
在using语句之后,它将退出它可用的范围。将调用Dispose方法对象,但此时对象不一定是垃圾回收。
所以这意味着如果你在对象的Dispose()方法中有清理过的项目(文件关闭等),它们将在using语句结束后立即被清除。 如果你有一个终结器(~WourClassName)除此之外做其他事情,你不能保证那时会被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.