2016-11-03 84 views
1

有人能解釋我這個代碼的工作原理嗎?沒有顯式構造函數和只讀屬性的C#類

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'之外訪問'Name'屬性,但是如何在此函數中指定'Children'屬性?

謝謝你的解釋。 乾杯。

+0

謝謝dbc! –

回答

2

這有點混亂對象初始化語法檢索get訪問的收集和使用上收集公衆Add方法。它的工作原理是因爲IList<Person>的編譯時類型具有(繼承)a public Add method與兼容的簽名(需要參數Person)。

+0

謝謝Jeppe! –

相關問題