【问题标题】:Using keyword causes object to go out of scope使用关键字会导致对象超出范围
【发布时间】:2013-09-25 20:44:38
【问题描述】:

为什么在 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;
        }
    }
}

【问题讨论】:

  • object ok 将在using 作用域之后被释放在这里阅读msdn.microsoft.com/en-us/library/yh598w02.aspx 但你需要把{ 括号来定义作用域和实现IDisposable
  • 在 {} 中使用 using 语句后的所有内容。例如 - using(var a = new b()){if (a == 1)a = 2;};
  • 你的 using 块需要被包裹在 {...}

标签: c# .net memory-leaks idisposable


【解决方案1】:

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

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

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

一些点(在上面的 cmets 中找到):

  1. 这永远不会是真的,因为你有两个不同的实例。 除非,该类已经覆盖了相等运算符

  2. 这无效且不会编译,您不能重新分配在using 语句中使用的变量

  3. 这里ok 将超出范围,此时它也将被释放,假设它实现了 IDisposible - 我认为如果它不实现它就不会编译IDisposable 无论如何

总体而言,您看似尝试做的事情根本没有多大意义。

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 2020-10-16
    • 2017-03-24
    • 1970-01-01
    • 2015-12-10
    • 2015-11-18
    • 1970-01-01
    • 2021-12-15
    • 2012-02-16
    相关资源
    最近更新 更多