初始化列表与构造函数的调用顺序是什么?

public class MyClass {

    public int MyIntegerValue { set; get; }

    public MyClass() {
        if(MyIntegerValue = 5) {
           DoA();
        } else {
           DoB();
        }
    }
}


给定前面的代码,如果我调用new MyClass() { MyIntegerValue = 5 },将执行DoA()DoB()吗?

如果执行了DoB(),是否有一种方法可以调用DoA()而不将MyIntegerValue作为参数传递给构造函数?

最佳答案

在这种情况下,它将执行DoB,因为将调用第一个构造函数,并为其分配MyIntegerValue。

您的代码很简单

MyClass mc = new MyClass();
mc.MyIntegerValue = 5;


但是你可以做

private int _MyIntegerValue = 5;

public int MyIntegerValue
{
    get { return _MyIntegerValue; }
    set { _MyIntegerValue = value; }
}


要么

public MyClass(int _myIntegerValue)
{
    MyIntegerValue = _myIntegerValue;
    if (MyIntegerValue == 5)
        DoA();
    else
        DoB();
}


像这样打电话

new MyClass(5);

关于c# - 初始化程序列表和构造函数调用顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27995476/

10-15 00:36