【问题标题】:Why is a constructor run three times when breakpoints are set?为什么设置断点时构造函数会运行三遍?
【发布时间】:2018-08-11 17:49:02
【问题描述】:

尝试编译这段代码。为什么ctor工作3次? 在输出前添加断点并调试。

private static void Main(string[] args)
{
    Console.WriteLine(new A().a);
}

class A
{
    public int a;
    public A()
    {
        Console.WriteLine(GetHashCode());
    }
}

输出:

【问题讨论】:

  • ctor work 3 times ? 是什么意思?你得到什么输出,你期望什么输出?
  • 尝试编译一下就会看到
  • 我得到 374897570 作为输出。
  • 我们在这里看到了整个程序吗?还有别的吗?
  • 尝试在输出前加断点调试一下,你会看到

标签: c# class constructor


【解决方案1】:

这是 Visual Studio 中调试设置的副作用。转到工具->选项,然后调试->常规。取消选中“启用属性评估和其他隐式函数调用”。那么你有断点和没有断点的行为会是一致的。

或者,您可以将 main 方法中的行更改为:

Console.WriteLine((new A()).a);

【讨论】:

    【解决方案2】:

    构造函数只为我工作一次,没有断点。

    但是,如图所示添加断点后,确实存在对A() 的三个调用。

    【讨论】:

    • 尝试在输出前添加断点并调试它,你会明白我在说什么
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2020-11-12
    相关资源
    最近更新 更多