2016-11-03 3 views
1

Kann mir jemand erklären, wie dieser Code funktioniert?C# -Klasse ohne expliziten Konstruktor und schreibgeschützte Eigenschaft

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

Die 'Children'-Eigenschaft ist' schreibgeschützt '(da sie keinen Setter hat). Die Funktion 'GetFamilyTree' scheint einen impliziten Initialisierer zu verwenden, was für die 'Name'-Eigenschaft gut ist, da auf sie außerhalb von' Person 'zugegriffen werden kann, aber wie' Children'-Eigenschaft in dieser Funktion zugewiesen werden kann?

Vielen Dank für Ihre Erklärungen. Prost.

+0

Danke dbc! –

Antwort

2

Diese etwas verwirrende Objektinitialisierer Syntax abruft die Sammlung mit dem get Accessor und verwendet die öffentliche Add Methode auf der Sammlung. Es funktioniert, weil der Kompilierzeittyp der Eigenschaft IList<Person>a public Add method mit einer kompatiblen Signatur (erbt in einem Person Argument) erbt (erbt).

+0

Danke, Jeppe! –

Verwandte Themen