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

时间:2009-12-15 18:01:26

标签: c#

关于以下代码:

using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
  code...
}

SqlConnection是否使用“using”初始化,因此在括号后取消引用/销毁?

请在必要时更正我的提问。

5 个答案:

答案 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)除此之外做其他事情,你不能保证那时会被调用。