Класс С# без явного конструктора и свойства только для чтения

Может кто-нибудь объяснить мне, как работает этот код?

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

Свойство «Дети» доступно только для чтения (поскольку у него нет установщика). Функция «GetFamilyTree», по-видимому, использует неявный инициализатор, который подходит для свойства «Имя», поскольку к нему можно получить доступ вне «Человека», но как свойство «Дети» может быть назначено в этой функции?

Спасибо за ваши объяснения. Ваше здоровье.


person JaYo    schedule 03.11.2016    source источник


Ответы (1)


Этот несколько запутанный синтаксис инициализатора объекта извлекает коллекцию с помощью метода доступа get и использует общедоступный метод Add для коллекции. Это работает, потому что тип времени компиляции свойства IList<Person> имеет (наследует) общедоступный Add метод с совместимой сигнатурой (принимает аргумент Person).

person Jeppe Stig Nielsen    schedule 03.11.2016
comment
Спасибо Джеппе! - person JaYo; 04.11.2016