初始化owner-object初始化程序中的get-only属性

时间:2014-08-14 08:22:51

标签: c# object-initializers

上次我在C#Object Initializer中遇到一个构造:

具有:

public class Class1
{
    public Class2 GetterOnlyProperty { get; private set; }

    public Class1()
    {
        this.GetterOnlyProperty = new Class2();
    }
}

初始化可能如下:

var class1 = new Class1()
{
    GetterOnlyProperty =
    {
        Prop1 = Value1,
        Prop2 = Value2,
        …
    }
};

请注意,GetterOnlyProperty之后没有new关键字,必须在Class1的构造函数中创建GetterOnlyProperty实例,否则将引发NullReferenceException。采用此实例并初始化属性。

它就像一个魅力,但我没有在MSDN中找到此功能的文档。此功能是否记录在案?你能给我一个文档的链接吗?

提前致谢! WOJTEK

1 个答案:

答案 0 :(得分:1)

在C#Spec。

的§7.6.10.2对象初始值设定项中
  

在等号后面指定对象初始值设定项的成员初始值设定项是嵌套对象初始值设定项,即   初始化嵌入对象。不是将新值分配给字段或属性,而是分配给   嵌套对象初始值设定项被视为对字段或属性成员的赋值。嵌套对象   初始值设定项不能应用于具有值类型的属性,也不能应用于具有值类型的只读字段。

至于嵌套集合初始值设定项:

  

在等号后面指定集合初始值设定项的成员初始值设定项是嵌入式的初始化   采集。初始化程序中给出的元素不是将新集合分配给字段或属性   添加到字段或属性引用的集合中。字段或属性必须是集合类型   满足§7.6.10.3

中规定的要求