This question already has answers here:
What's the difference between an object initializer and a constructor?

(7 个回答)


4年前关闭。




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

假设我们有以下情况:
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()) 调用覆盖吗?

最佳答案

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

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

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

关于c# - 使用对象初始值设定项时的执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43386081/

10-11 18:10