使用对象初始值设定项时的执行顺序

时间:2017-04-13 07:28:40

标签: c# initialization

今天早上,我在我正在构建的应用程序中遇到了一个有趣的情况。即使我以另一种方式解决了这个问题,我也很想知道答案是什么。

让我们说我们有以下情况:

public class SomeDependency
{
    public string SomeThing { get; set; }
}

public class SomeClass
{
    public SomeDependency Dependency { get; }

    public SomeClass() : this(new SomeDependency) { }

    public SomeClass(SomeDependency dependency) 
    {
        Dependency = dependency;
    }
}

现在有两种方法可以初始化这个类:
我们可以说:

var x = new SomeClass();

那当然会给我们预期的情况。但是如果我们这样做会怎么样:

var x = new SomeClass 
{
    Dependency = new SomeDependency { SomeThing = "some random string" }
};

我们在后一种情况下使用无参数构造函数,但我们通过对象初始化程序给Dependency一个值,因此我的问题是:

Dependency电话会覆盖this(new SomeDependency())吗?

1 个答案:

答案 0 :(得分:2)

您的代码实际上由编译器转换为:

var x = new SomeClass();
x.Dependency = new SomeDependency { SomeThing = "some random string" };

所以不,构造函数不会覆盖您为Dependency设置的值。相反,它将更改第二行构造函数中的默认值。