今天早上,我在我正在构建的应用程序中遇到了一个有趣的情况。即使我以另一种方式解决了这个问题,我也很想知道答案是什么。
让我们说我们有以下情况:
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())
吗?
答案 0 :(得分:2)
您的代码实际上由编译器转换为:
var x = new SomeClass();
x.Dependency = new SomeDependency { SomeThing = "some random string" };
所以不,构造函数不会覆盖您为Dependency
设置的值。相反,它将更改第二行构造函数中的默认值。