没有显式构造函数和只读属性的C#类

时间:2016-11-03 23:44:35

标签: c# object-initializers

有人能解释一下这段代码的工作原理吗?

public class Person
{
    readonly List<Person> _children = new List<Person>();
    public IList<Person> Children
    {
        get { return _children; }
    }

    public string Name { get; set; }
}

public static Person GetFamilyTree()
{
    return new Person
    {
        Name = "David Weatherbeam",
        Children =
        {
            new Person
            {
                Name="Alberto Weatherbeam",
                Children=
                {
                    new Person
                    {
                        Name="Jenny van Machoqueen",
                        Children=
                        {
                            new Person
                            {
                                Name="Nick van Machoqueen",
                            },
                            new Person
                            {
                                Name="Matilda Porcupinicus",
                            }
                        }
                    }
                }
            }
        }
    };
}

儿童&#39;财产是“只读”#39; (因为它没有制定者)。 &#39; GetFamilyTree&#39;函数似乎使用了一个隐式初始化程序,这对于名称&#39;物业,因为它可以在外面访问&#39;人物&#39;但是如何&#39;儿童&#39;可以在此函数中分配属性吗?

感谢您的解释。 欢呼声。

1 个答案:

答案 0 :(得分:2)

这个有点令人困惑的对象初始化程序语法使用get访问器检索集合,并在集合上使用公共Add方法。它的工作原理是因为属性IList<Person>的编译时类型具有(继承)a public Add method并具有兼容签名(接受Person参数)。