0

如果我在实例化对象时使用对象初始化程序,该对象构造函数是否可以访问已初始化的属性?

public class ExampleClass {
    public string proptery1 { get; set; }
    public string property2 { get; set; }

    public ExampleClass() {
        if(!string.IsNullOrEmpty(property1)) {
            ...
        }
    }
} 

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};
4

3 回答 3

1

集合初始值设定项调用集合的 .Add 方法,该方法必须为特定集合定义。该对象将在传递给 .Add 之前完全构造。

语法

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};

不显示集合初始化程序,而是显示对象初始化。

在这里,将调用您的构造函数,然后调用给定属性的设置器。

一个合适的例子是

List<ExampleClass> list = new List<ExampleClass>() { 
    new ExampleClass() {
         exampleClass.property1 = "hello";
         exampleClass.property2 = "world";            
    }
}

事件的顺序是

  1. 创建一个新实例List<ExampleClass>并将其分配给列表
  2. 创建 ExampleClass 的新实例,调用构造函数。
  3. 在 ExampleClass 的新实例上调用属性设置器
于 2012-08-01T15:53:18.930 回答
1

不,在初始化任何属性之前调用构造函数。

你的代码:

ExampleClass exampleClass = new ExampleClass() {
    property1 = "hello",
    property2 = "world"
};

是语言糖

ExampleClass exampleClass = new ExampleClass();
exampleClass.property1 = "hello";
exampleClass.property2 = "world";
于 2012-08-01T15:53:28.887 回答
1

不,构造函数首先被调用。对象初始化只是调用构造函数然后设置对象属性的语法糖。

于 2012-08-01T15:53:31.553 回答