2016-03-22 51 views
-2

我知道,在這種情況下,我可以簡單地使用abs,但我只是好奇:爲什麼會發生這種情況?三個運算符導致StackOverflowException

public float maxThrotle{ 
    set { maxThrotle = value < 0 ? -value : value; //this line causes problem 
    } 
    get { return maxThrotle; } 
} 
+5

你的設置器分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性。其中運行您的setter,分配maxThrotle屬性... Kaboom! –

+4

您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。其中運行您的getter讀取maxThrotle屬性。哪個.. Kaboom! –

+2

你正在重複你自己的漢斯。變老? ;) –

回答

2

通過嘗試從屬性設置器中調用屬性設置器導致無限循環。

你可能想創建一個私有支持字段存儲的值,如下所示:

private float maxThrotle; 
public float MaxThrotle { 
    set { maxThrotle = value < 0 ? -value : value; //this line causes problem 
    } 
    get { return maxThrotle; } 
} 

注意我把其更名爲使用大寫字母,按照大多數C#編碼標準。

(此外,詞節氣門拼寫與雙 - )。

+0

啊,真是太尷尬了!無論如何,謝謝你的回覆。我的編程老師告訴我,在最新版本的C#中,你不需要實現額外的私有變量......但是他錯了,或者我誤解了他。 – user3387666

+0

如果你在getter和setter中不需要特殊的邏輯,你可以直接寫'public float MaxThrottle {get;組; }'這相當於private float _#maxThrottle; public float MaxThrottle {get {return _#maxThrottle; } set {_#maxThrottle = value; }(編譯器生成一個帶有無效名稱的後綴字段'_#maxThrottle',所以除非通過屬性才能訪問它)。但是,如果實現自定義getter和setter,則還需要實現後臺字段。 – CompuChip