2016-03-22 9 views
-2

Ich weiß, ich könnte einfach abs in diesem Fall verwenden, aber ich bin nur neugierig: Warum passiert das?Drei Operator Ursachen StackOverflowException

+5

Ihr Setter weist die Eigenschaft maxThrotle zu. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Dies führt Ihren Setter, der die Eigenschaft maxThrotle zuweist. Womit dein Setter die Eigenschaft maxThrotle zuweist ... Kaboom! –

+4

Ihr Getter liest die Eigenschaft maxThrotle. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Welches führt Ihren Getter aus, der die Eigenschaft maxThrotle liest. Was .. Kaboom! –

+2

Sie wiederholen sich Hans. Alt werden? ;) –

Antwort

2

Sie verursachen eine Endlosschleife, indem Sie versuchen, den Property Setter innerhalb des Property Setters aufzurufen.

Sie wollen wahrscheinlich ein eigenes Trägerfeld zu erzeugen, den Wert zu speichern, wie folgt:

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

Hinweis I die Eigenschaft umbenannt einen Großbuchstaben zu verwenden, in Übereinstimmung mit dem meisten C# Coding-Standards.

(Auch das Wort Drossel ist mit Doppel-t- geschrieben).

+0

Ahhh, das ist so peinlich! Wie auch immer, danke für Ihre Antwort. Mein Programmierlehrer sagte mir, dass Sie in der neuesten Version von C# keine zusätzliche private Variable implementieren müssen ... aber entweder lag er falsch oder ich habe ihn falsch verstanden. – user3387666

+0

Wenn Sie im Getter und Setter keine spezielle Logik benötigen, können Sie einfach 'public float MaxThrottle {get; einstellen; } 'was entspricht' private float _ # maxThrottle; public float MaxThrottle {get {return _ # maxThrottle; } set {_ # maxThrottle = Wert; }} '(Der Compiler erzeugt ein Backing-Feld' _ # maxThrottle' mit einem ansonsten ungültigen Namen, so dass Sie nur über die Eigenschaft darauf zugreifen können). Wenn Sie jedoch einen benutzerdefinierten Getter und Setter implementieren, müssen Sie auch das Hintergrundfeld implementieren. – CompuChip

Verwandte Themen