This question already has answers here:
What's the difference between an object initializer and a constructor?
(7 个回答)
4年前关闭。
今天早上我在我正在构建的应用程序中遇到了一个有趣的情况。即使我已经以另一种方式解决了这个问题,我还是很想知道答案是什么。
假设我们有以下情况:
现在有两种初始化这个类的方法:
我们只能说:
那当然会给我们预期的情况。但是如果我们这样做:
我们在后一种情况下使用无参数构造函数,但我们确实通过对象初始值设定项给
所以不,构造函数不会覆盖您为
(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