我什么时候应该使用using语句?

时间:2012-04-07 18:51:07

标签: c# .net using-statement

  

可能重复:
  What is the C# Using block and why should I use it?

我将旧网站转换为C#,我不知道何时应该使用'使用'。有没有一般指导方针?我知道它的好处,但我不能100%确定如何使用它。是每次我新的'方法/属性?

SqlConnection awesomeConn = new SqlConnection(connection);

5 个答案:

答案 0 :(得分:19)

如果一个类实现了IDisposable,那么它将创建一些非托管资源,当你使用它们时需要将它们“处理掉”。所以你会做类似的事情:

SqlConnection awesomeConn = new SqlConnection(connection);

// Do some stuff

awesomeConn.Dispose();

为了避免忘记处理资源(在这种情况下关闭数据库连接),特别是在抛出异常时,您可以使用using语法在退出using语句时自动调用dispose范围:

using (SqlConnection awesomeConn = new SqlConnection(connection))
{
     // Do some stuff
} // automatically does the .Dispose call as if it was in a finally block

实际上,使用块等同于:

try
{
    SqlConnection awesomeConn = new SqlConnection(connection);

    // do some stuff
}
finally 
{
    awesomeConn.Dispose();
}

答案 1 :(得分:7)

MSDN

  

通常,当您使用IDisposable对象时,您应该声明和   在using语句中实例化它。 using语句调用   以正确的方式处理对象的方法,以及(当您使用它时)   如前所示)它也会导致对象本身超出范围   只要调用Dispose。在使用块中,对象是   只读,无法修改或重新分配。

     

using语句确保即使调用Dispose也会调用   在对象上调用方法时会发生异常。您可以   通过将对象放在try块中来实现相同的结果   然后在finally块中调用Dispose;其实这是怎么回事   using语句由编译器翻译。代码示例   之前在编译时扩展为以下代码(请注意额外的   花括号来创建对象的有限范围):

示例:

using (StreamReader stream = new StreamReader("path")) 
{
     string line = stream.ReadLine();
}

答案 2 :(得分:1)

对实例化IDisposable实例化的所有对象使用use,除非它们的生命周期超出当前执行范围(即方法调用)。在这种情况下,例如,如果你有一个一次性成员变量,那么包含类应该在其Dispose中实现IDisposable和Dispose成员。

答案 3 :(得分:0)

如果您想自动处理对象,通常会使用它。否则你必须手动调用myobj.Dispose()。

请参阅此处的参考文档:http://msdn.microsoft.com/en-us/library/yh598w02.aspx

答案 4 :(得分:0)

使用是一种方便,可以确保您不会在不处理资源的情况下退出块。只要您必须在本地代码块中使用IDisposable实现程序,就可以并且应该使用它。