构造函数是否可以访问初始化属性

时间:2012-08-01 15:51:19

标签: c# class initialization collection-initializer

如果在实例化对象时使用对象初始值设定项,那么对象构造函数是否可以访问初始化属性?

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"
};

3 个答案:

答案 0 :(得分:1)

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

之前,该对象将完全构造

语法

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

不显示集合初始值设定项,而是显示对象初始化。

在这里,你的构造函数将被调用,然后将调用给定属性的setter。

一个恰当的例子是

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

事件的顺序是

  1. 创建List<ExampleClass>的新实例并将其分配给 list
  2. 创建了一个新的ExampleClass实例,构造函数名为。
  3. 在ExampleClass的新实例
  4. 上调用属性设置器

答案 1 :(得分:1)

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

您的代码:

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

的语言糖
ExampleClass exampleClass = new ExampleClass();
exampleClass.property1 = "hello";
exampleClass.property2 = "world";

答案 2 :(得分:1)

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