关于“using”关键字的基本C#

时间:2013-07-30 02:44:16

标签: c# asp.net

我是C#学习的初学者。

我意识到using与C#中的import类似

但是在这种情况下我遇到过:

using (con)
{
    con.Open();
    cmd.ExecuteNonQuery();
}

只是好奇这里使用的是什么,没有using (con)

的情况有什么不同

4 个答案:

答案 0 :(得分:11)

这种形式的usingstatement,而不是directive)与IDisposable界面一起使用,以回收非托管资源。

非托管资源就像数据库连接一样,垃圾收集器无法简单地回收它们。相反,它们需要以有序的方式关闭。当using代码块超出范围时,将在数据库连接对象上调用Dispose()方法,关闭连接并释放资源。

例如,查看SQLConnection课程。请注意,它继承自DBConnection类,后者又实现IDisposable接口。 SQLConnection对象implements the Dispose method,当范围离开using块时关闭连接。

请注意,您可以abuse the using statementIDisposable获取乐趣和利润。 ASP.NET MVC使用using来关闭HTML标记!

答案 1 :(得分:5)

using语句将在块结束时调用Dispose方法。该对象必须实现IDisposable接口才能使其正常工作。这是有效的,因为您的对象con具有IDisposable的实现,并且在此方法之后它是null。我喜欢实现声明对象的using块,例如:

using (var con = new SqlConnection("connection string"))
{
    con.Open();

    using(var cmd = con.CreateCommand()) 
    {
       cmd.CommandText = "select count(*) from table";
       result = (int) cmd.ExecuteScalar();
    }

    con.Close();
}

答案 2 :(得分:3)

根据MSDN

  

C#通过.NET Framework公共语言运行库(CLR)自动释放用于存储不再需要的对象的内存。记忆的释放是不确定的;只要CLR决定执行垃圾收集,就会释放内存。但是,通常最好尽快释放有限的资源,如文件句柄和网络连接。

     

using语句允许程序员指定何时使用资源的对象应该释放它们。提供给using语句的对象必须实现IDisposable接口。此接口提供Dispose方法,该方法应释放对象的资源。

     

当达到using语句的结尾或者抛出异常并且控制在语句结束之前离开语句块时,可以退出using语句。

using语句强制清理资源,而开发人员不必明确处理它们或等待垃圾收集器回收资源。

答案 3 :(得分:3)

using块可以应用于任何实现IDisposable接口的.NET对象。如果您尝试对没有的对象应用块,则会收到编译错误。

using块实际上会围绕try-finally块内的代码生成using块。

以下内容:

using (con)
{
    con.Open();
    cmd.ExecuteNonQuery();
}

相当于写作:

try
{
    con.Open();
    cmd.ExecuteNonQuery();
}
finally
{
    con.Close();
    con.Dispose();
}

using块辅助工具是一种生产力增强功能,可确保正确清理一次性对象,并且在我看来,可以创建更易于阅读和维护的代码。

注意:您可以嵌套using块,如下所示:

using(con)
using(cmd)
{

}

C#中的using语句相当于VB.NET中的Imports语句。