2008-12-15 60 views
33

我知道java,通常會放入getter/setter方法。我有興趣在C#中使用下面的代碼,但它會拋出StackOverflow異常。我究竟做錯了什麼?爲什麼Property Set會拋出StackOverflow異常?

長途區號

c.firstName = "a"; 

屬性代碼

public String firstName; 
{ 
    get 
    { 
     return firstName; 
    } 
    set 
    { 
     firstName = value; 
    } 
} 

回答

83

這是因爲你在遞歸調用的屬性 - 在set你重新設置該屬性,繼續循環往復直到你吹堆棧。

您需要私人支持字段來保存該值,例如另外,如果您使用的是C#3.0,則可以使用auto-property,它會爲您創建一個隱藏的後臺字段,例如,

public string FirstName { get; set; } 
+0

您的第一個示例中有錯誤。在名字後面刪除分號。 Picky,我知道。沒關係,我會修復它 – Les 2012-08-11 14:12:11

+0

固定...只有4年晚了;-) – 2012-08-11 22:44:49

12

您正在設置屬性名稱 - 而不是字段名稱。這會更好:

private m_firstName; 

public String firstName; 
{ 
    get 
    { 
     return m_firstName; 
    } 
    set 
    { 
     m_firstName = value; 
    } 
} 
相關問題