使用关键字会导致对象超出范围

时间:2013-09-20 12:45:35

标签: c# .net memory-leaks idisposable

为什么在if语句中使用对象ok超出范围?以及如何处置对象ok

public class hello : IDisposable { 

}

public class hi{

    private void b() 
    {
        using(hello ok = new hello());

        hello no = new hello();

        if( ok == no )
        {
            ok = no;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您没有正确使用using语句,您想要的内容如下:

using(hello ok = new hello())
{
    hello no = new hello();

    if( ok == no )//Point 1
    {
        ok = no;//Point 2
    }
}//Point 3

一些要点(见上述评论):

  1. 这永远不会成立,因为你有两个不同的实例。 除非,否则该类已重写了等号运算符

  2. 这是无效且无法编译,您无法重新分配using语句中使用的变量

  3. 此处ok将超出范围,此时也将处理它,假设它实现了IDisposible - 我认为如果它没有'它将不会编译'无论如何都要实施IDisposable

  4. 总的来说,你似乎想要做的事情根本没有多大意义。