2012-08-08 39 views
0

當我嘗試使用body來實現get-set-property並使用該set時,它總是以SIGSEGV退出 - 一種分段錯誤。我在Mac OS X Mountain Lion(10.8)下運行Mono 2.10.9 + MonoDevelop 3.0.3.5。這裏是我能得到的最小代碼量:實現get-set-property時的C#SIGSEGV

public class MainClass { 
    public static int Main(string[] args) { 
     Foo foo = new Foo(); 
     foo.Bar = 42;  // Never makes it past this line 
     return 0; 
    } 
} 

public class Foo { 
    public int Bar { 
     get { return Bar; } 
     set { Bar = value; } 
    } 
} 

我做錯了什麼,或者這是一個單聲道錯誤?

+0

我知道我扔每次我看到有人在示例中使用'42'時間SIGSEGV 。它不再有趣,人們。回到使用'69',它需要清除掉灰塵。 – Will 2012-08-08 16:24:15

+1

它應該給予某種堆棧溢出,因爲你遞歸調用屬性,直到堆棧爆炸...什麼?單聲道炸彈你SIGSEGV錯誤,而不是運行時異常? – 2012-08-08 17:02:43

+0

這可能是類似於[this](http://stackoverflow.com/questions/10807059/segmentation-fault-11)海報的問題...我和他都應該是堆棧溢出異常,但都是某種段錯誤。奇怪,是的。 – Jwosty 2012-08-08 17:11:33

回答

3

試着改變你的代碼如下:

public class Foo { 
    public int Bar { get; set; } 
} 

OR這樣的:

public class Foo { 
    private int _bar; 
    public int Bar { 
     get { return _bar; } 
     set { _bar = value; } 
    } 
} 

您沒有後備存儲。您可能需要添加一個,或使用自動屬性。您的代碼編寫方式是在訪問這些屬性時遞歸調用get/set。

+0

哦,我現在明白了。謝謝!我感到很粗心。 :P – Jwosty 2012-08-08 17:01:05

1

您可以使用自動實現的屬性:

public int Bar { get; set; } 

,或者你可以與現場工作:

private int _bar; 
public int Bar 
{ 
    get { return value; } 
    set { _bar = value; } 
}