Stapelüberlaufausnahme in c # -Setter

7

Das ist einfach zu erklären: das funktioniert

%Vor%

das ist nicht

%Vor%

Ich bekomme eine Stack-Überlauf-Ausnahme in einer zweiten Klasse und ich weiß nicht warum. Ich kann das erste Formular nicht verwenden, da es von der Unity Engine nicht unterstützt wird.

    
Patrik 18.07.2010, 15:40
quelle

4 Antworten

24

Wenn Sie a = value schreiben, rufen Sie den Property-Setter erneut auf.

Um nicht automatische Eigenschaften zu verwenden, müssen Sie ein separates privates Hintergrundfeld wie folgt erstellen:

%Vor%     
SLaks 18.07.2010, 15:42
quelle
15

Sie haben keine Backing-Variable deklariert - Sie haben gerade eine Eigenschaft, deren Getter und Setter sich selbst aufrufen. Es ist mir nicht klar, warum das erste Formular nicht von Unity unterstützt wird - was bedeutet, dass das Äquivalent ebenfalls nicht unterstützt wird, aber es ist im Grunde Folgendes:

%Vor%

Ich hätte natürlich einen konventionelleren Namen - was bedeutet, dass Sie ohne das "Wert" -Bit davonkommen können:

%Vor%

Um ein bisschen mehr Details darüber zu geben, warum Ihr aktuelles zweites Formular ein StackOverflowException wirft, sollten Sie immer daran denken, dass Eigenschaften im Grunde verkappte Methoden sind. Ihr fehlerhafter Code sieht folgendermaßen aus:

%Vor%

Hoffentlich ist es offensichtlich, warum diese Version den Stapel bläst. Die geänderte Version legt nur eine Variable fest, anstatt die Eigenschaft erneut aufzurufen. Daher sieht sie beim Erweitern folgendermaßen aus:

%Vor%     
Jon Skeet 18.07.2010 15:42
quelle
3

Sie benötigen eine private Unterstützungsvariable in Ihrer öffentlichen Eigenschaft:

%Vor%     
Cᴏʀʏ 18.07.2010 15:43
quelle
3

Sie können nicht denselben Variablennamen im Getter und Setter verwenden.
Dies wird dazu führen, dass es sich selbst anruft und stackoverflow wird. Zu viel Rekursion.
Sie benötigen eine Hintergrundvariable:

%Vor%     
Sani Singh Huttunen 18.07.2010 15:44
quelle