2014-01-08 45 views
6

爲什麼我們可以在結構中有一個靜態的循環引用,但不是實例類型的循環引用?爲什麼循環引用實例類型的結構體中不允許使用靜態類型的循環引用?

struct C 
{ 
    //following line is not allowed. Compile time error. 
    // it's a non static circular reference. 
    public C c1; 
    //But this line compiles fine. 
    //static circular reference. 
    public static C c2; 
} 
+1

如果你有自己的結構域,那麼你不能確定它的大小。 –

回答

6

非靜態引用失敗,因爲您試圖使結構成爲其自身的一部分,從而導致循環引用。

靜態聲明的工作原理是因爲c2不是結構本身的一部分;每當你聲明例如C foo,c2不影響foo的大小。