2016-11-03 4 views
1

Quelqu'un peut-il m'expliquer comment fonctionne ce code?Classe C# sans constructeur explicite et propriété en lecture seule

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

La propriété 'Children' est 'en lecture seule' (car elle n'a pas de setter). La fonction 'GetFamilyTree' semble utiliser un initialiseur implicite qui convient à la propriété 'Name' car il peut être accédé en dehors de 'Person' mais comment la propriété 'Children' peut-elle être affectée à cette fonction?

Merci pour vos explications. À la vôtre.

+0

Merci dbc! –

Répondre

2

Cette confusion un peu objet initialiseur syntaxe récupère la collection avec l'accesseur get et utilise la méthode du Add public sur la collecte. Cela fonctionne parce que le type de compilation de la propriété IList<Person> a (hérite) a public Add method avec une signature compatible (prend en argument Person).

+0

Merci Jeppe! –