2012-04-13 99 views
0
價值觀

能否請你告訴我它們的區別between..the下面的構造函數初始化 的..初始化在構造

這裏的人是一類。在我試圖初始化一些值... 我已經創建了一個名爲

三個屬性 「姓名,年齡,CANCODE」

,並呼籲這一個..

//Without Static 

public Class Person 
{ 

    Person[] people = { 
      new Person { Name="Allen Frances", Age=11, CanCode=false }, 
      new Person { Name="Burke Madison", Age=50, CanCode=true } 
    } 

    // with Static...  
    /* 
    static Person[] people = 
    { 
      new Person { Name="Allen Frances", Age=11, CanCode=false }, 
      new Person { Name="Burke Madison", Age=50, CanCode=true } 
    } 
    */ 
    ........... 
} 

當我試圖初始化類構造函數沒有static關鍵字.. 它顯示「堆棧溢出異常」。

當我調試代碼時,這裏當爲Person類創建對象後 初始化發生了更多時間,我不知道爲什麼?

我所知道的是,如果你使用的static關鍵字那些我們初始化構造數據 對象創建之前......但在這裏,當我們嘗試後 它創造出這種行爲的對象的初始化數據..

你能告訴我爲什麼......

+0

嘗試請與改寫確切的代碼示例的問題(比如,我沒有看到'out'keyword在你的代碼)。此外,僅對代碼使用代碼塊(縮進)來使問題可讀。 – 2012-04-13 06:10:43

回答

4

,因爲你是一個名爲Person類的定義裏面你得到一個堆棧溢出,你要創建裏面是同一類的多個對象。當創建這些Person對象時,他們也會嘗試創建更多的Person對象,等等。

這個遞歸定義吹的堆棧,因爲它是無限的,永遠不會結束。

嘗試定義這個代碼塊:

Person[] people = { 
       new Person { Name="Allen Frances", Age=11, CanCode=false }, 
        new Person { Name="Burke Madison", Age=50, CanCode=true } 
        } 

在代碼中,也許主要方法的不同部分?

+0

值得注意的是,堆棧代碼的語義也是不正確的,或者最好是奇怪的。類中的實例字段應該包含關於類實例的一些信息,或者對由實例擁有或包含在其中的對象的引用。一個人通常不會包含其他人!所以這個代碼實際上不工作的事實並不是那麼麻煩。如果OP想要在某個地方保存一個人員列表,那麼它應該可能位於「People」類或「PersonRepository」類中。 – phoog 2012-04-13 06:23:19

+0

謝謝回覆。但是,當我使用Static關鍵字時,它沒有顯示錯誤。 – 2012-04-21 06:14:04

+0

因爲靜態意味着它被綁定到類定義上,而不是實例。所以這條線只會運行一次,而不是每次創建一個人。儘管這是有效的,但這是錯誤的地方來保存人員名單,並且應該在程序的更高層次上完成。 – yamen 2012-04-21 07:50:59

0

Person[] people = new Person[2] { 
       new Person { Name="Allen Frances", Age=11, CanCode=false }, 
        new Person { Name="Burke Madison", Age=50, CanCode=true } 
        };