繁体   English   中英

C#:使用“using”初始化变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM