【发布时间】:2017-04-13 07:28:39
【问题描述】:
今天早上,我在正在构建的应用程序中遇到了一个有趣的情况。尽管我已经以另一种方式解决了这个问题,但我有兴趣找出答案。
假设我们有以下情况:
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()) 调用覆盖吗?
【问题讨论】:
-
依赖会被 this(new SomeDependency()) 调用覆盖吗? 相反。首先构造函数完全运行,然后字段/属性初始化完成 (
Dependency =)。对象初始化器是纯语法糖。它在new SomeClass返回新对象之后完成。
标签: c# initialization