【问题标题】:When should I use the using Statement? [duplicate]什么时候应该使用 using 语句? [复制]
【发布时间】:2012-04-20 21:20:11
【问题描述】:

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

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

SqlConnection awesomeConn = new SqlConnection(connection);

【问题讨论】:

标签: c# .net using-statement


【解决方案1】:

如果一个类实现了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

其实using块等价于:

try
{
    SqlConnection awesomeConn = new SqlConnection(connection);

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

【讨论】:

    【解决方案2】:

    MSDN:

    作为一项规则,当您使用 IDisposable 对象时,您应该声明并 在 using 语句中实例化它。 using 语句调用 以正确的方式处理对象上的方法,以及(当你使用它时 如前所示)它还会导致对象本身超出范围 一旦调用 Dispose。在 using 块中,对象是 只读,不能修改或重新分配。

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

    例子:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        在此处查看参考文档:http://msdn.microsoft.com/en-us/library/yh598w02.aspx

        【讨论】:

          【解决方案5】:

          使用是一种方便,可让您确保在不处置资源的情况下无法退出块。每当您必须在本地代码块中使用 IDisposable 实现者时,都可以并且应该使用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-10
            • 2012-10-02
            • 2019-12-26
            • 2014-05-19
            • 2011-06-16
            • 2012-03-18
            相关资源
            最近更新 更多