2012-11-19 45 views
-2

可能重複:
New to C#, why does Property Set throw StackOverflow exception?堆棧溢出異常,同時設置靜態屬性C#

我得到一個堆棧溢出異常,當我嘗試設置一個靜態屬性。

public static class StaticTest 
{ 
    static string stringToSet 
    { 
     get 
     {     
      return stringToSet; 
     } 
     set 
     { 
      stringToSet = value; 
     } 
    } 
} 

然後,在其他類:

public void setStaticProperty() 
{ 
    StaticTest.stringToSet = "Hello World"; // StackOverflow exception here 
} 

我做錯了嗎?

+1

發生堆棧溢出是因爲您的屬性設置器只是自己調用 – MMK

+0

使用後臺字段或自動屬性。 –

+2

查看http://stackoverflow.com/questions/13454902/stack-overflow-exception-while-setting-static-property-c-sharp –

回答

8
​​

因爲它調用了自身,所以StackOverflow已經在setter(和getter)中獲得了無限遞歸。

如果您不需要直接修改底層的領域,使用自動屬性,而不是:

static string stringToSet {get; set;} 
3

在靜態的屬性設置,你的靜態屬性stringToSet,要求分配一個值你的靜態屬性設置器,你在那裏給一個靜態屬性stringToSet分配一個值,它調用你的靜態屬性設置器,你將一個值分配給靜態屬性stringToSet,該屬性調用你的靜態屬性設置器,靜態屬性stringToSet ...

您需要添加一個專用字段來存儲屬性值;通常你會重命名該屬性以大寫字母開頭(StringToSet)。

private string stringToSet; 

public string StringToSet { 
    get { 
     return stringToSet; 
    } 
    set { 
     stringToSet = value; 
    } 
} 
+0

你好,非常感謝你的回答。但有了這個,我沒有一個靜態屬性... – Guilherme

+0

@Guilherme:對不起,忘記提及它的作品相同的靜態屬性,如果你標記字段和屬性爲'靜態'。但我看到你已經找到了你的答案。 –