2017-09-11 2 views
-2

Meine Anwendung wirft Stapelüberlauf-Ausnahmen beim Start bei einigen automatischen Eigenschaften und Objekten erstellen.Stapelüberlauf-Ausnahme bei Auto-Eigenschaften

Sie arbeiteten ohne Probleme, ich habe sie nicht geändert.

Grundsätzlich habe ich eine abstrakte Klasse "Rule", die eine Schnittstelle "IRule" implementiert, diese Eigenschaften sind von der Schnittstelle. Dann habe ich eine Kindklasse, die von Regel erbt, ich bekomme die Ausnahme für diese Kindklasse.

Edit:

public class RuleA: Rule 
{ 
    private RuleA_bestSettings; 

    #region PROPERTIES 

    public override Rule BestSettings { get { return _bestSettings; } set { _bestSettings = value as RuleA; } } 


    #endregion 

    public RuleA() 
    { 
     Initialize(); 
    } 

    protected override void Initialize() 
    { 
     base.Initialize(); 

     _bestSettings = new RuleA(); 
    } 



} 

}

nun die Ausnahme auf der Initialize-Methode erhalte ich, wenn ich die Eigenschaft instanziiert

Dies geschieht, wenn ein neues Objekt mit diesen Eigenschaften instanziiert wird.

Si è verificata l'eccezione System.StackOverflowException 
    HResult=0x800703E9 
    Messaggio=Generata eccezione di tipo 'System.StackOverflowException'. 

Ich kann es nicht herausfinden, irgendwelche Ideen? Vielen Dank!

+2

Vielleicht ist Ihre Frage ist besser, wenn Sie hinzufügen auch der Code, wo Sie diese Eigenschaft verwenden und wo Sie die Ausnahme erhalten – Steve

+1

Können Sie die Ausnahme und Call-Stack buchen? Diese Eigenschaft sieht gut aus. Es ist etwas anderes. –

+0

Entschuldigung, ich habe die Frage bearbeitet. – Fabrizio402

Antwort

0

In Ihrem Initialize Abschnitt instanziieren Sie einen neuen RuleA. Diese neue RuleA wird sich selbst konstruieren und dabei wird sie ihren eigenen Initialize Abschnitt aufrufen und einen dritten RuleA erstellen. Das wird ein Viertel schaffen. Und ein Fünftel. Und so weiter, bis der Stapel voll ist.

Ich bin nicht sicher, was Sie versuchen zu erreichen, aber meine Vermutung ist, dass anstelle dieses

protected override void Initialize() 
{ 
    base.Initialize(); 

    _bestSettings = new RuleA(); 
} 

Sie dies tun soll:

protected override void Initialize() 
{ 
    base.Initialize(); 

    _bestSettings = this; 
} 
+0

Danke, sollte dies das Problem sein .. Das ist die letzte Änderung, die ich auf der Klasse. Grundsätzlich brauche ich ein neues Objekt vom gleichen Typ RuleA als Eigenschaft. Ich habe einen Fehler gemacht, um es mit der Initialize-Methode zu instanziieren, die für den Konstruktor aufgerufen wird. Ich habe es auf die andere Methode übertragen und jetzt funktioniert es! Vielen Dank an alle für die Hilfe und Entschuldigung für die Verwirrung. – Fabrizio402

+0

@mjwills danke, ich habe es gerade getan. – Fabrizio402

Verwandte Themen