设置断点后,构造函数为什么要运行三次?

时间:2018-08-11 17:49:02

标签: c# class constructor

尝试编译此代码。为什么ctor工作3次? 在输出之前添加断点并对其进行调试。

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

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

输出:

enter image description here

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:-2)

构造函数对我来说只工作一次,没有断点。 enter image description here

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

enter image description here