3 Stimmen

StackOverFlow auf Klasseneigenschaft

Duplikat:

Neu in C#, warum wirft Property Set StackOverflow Ausnahme?

Ich habe eine einfache Klasse namens myClass, die eine Eigenschaft namens isAuthenticated mit dem folgenden Code hat:

public class myClass
{
        public myClass()
        {
            this.isAuthenticated = false;
        }
        public bool isAuthenticated
        {
            get { return isAuthenticated; }
            set { isAuthenticated = value; }
        }
}

Wenn ich die Klasse initialisiere, erhalte ich einen Stackoverflow in der Zeile set {...}, was mache ich falsch?

14voto

krosenvold Punkte 73093

Der Getter/Setter ruft sich selbst auf. Fügen Sie eine Mitgliedsvariable hinzu.

{
     bool isAuthenticated;
        public myClass()
        {
            IsAuthenticated = false;
        }
        public bool IsAuthenticated
        {
            get { return isAuthenticated; }
            set { isAuthenticated = value; }
        }
}

6voto

Davide Vosti Punkte 2475

Denn Sie setzen die Eigenschaft myClass.IsAuthenticated selbst.

Sie müssen den Wert in einer lokalen Variablen speichern oder, wenn Sie C# 3.0 oder höher verwenden, einfach tun (automatische Eigenschaft)

public bool IsAuthenticated {get; set;}

1voto

Martin C. Punkte 11382

Als Ergänzung zu den "Property-calls-itself"-Bemerkungen können Sie in der neuesten C#-Version solche einfachen Eigenschaften in eine Auto-Eigenschaft:

public class myClass
{
    public myClass()
    {
        this.IsAuthenticated = false;
    }

    public bool IsAuthenticated { get; set; }
}

Editar: geänderte Großschreibung der Eigenschaft, C#-Namenskonventionen fordert Großbuchstaben als Anfangsbuchstaben eines öffentlichen Feldes oder einer Eigenschaft.

0voto

Fabian Vilers Punkte 2852

Die Schlange frisst ihren Schwanz. Wenn Sie isAuthenticated im Konstruktor true zuweisen, verwenden Sie den Setter Ihrer Eigenschaft, aber im Setter setzen Sie sie wieder, so dass Sie eine Art unendliche Einstellungsschleife haben.

0voto

Lee Punkte 1105

Der Setter ruft sich selbst auf, wenn er ein privates Feld setzen sollte - so wie es aussieht, wird der Getter das gleiche tun, da Ihr Beispiel keine Felder enthält. Wenn Sie .net 3.5 verwenden, können Sie einfach eine Auto-implementierte Eigenschaft verwenden...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X