2008-12-15 15 views
33

Ich kenne Java und würde normalerweise in Getter/Setter-Methoden setzen. Ich bin daran interessiert, es in C# mit dem folgenden Code zu tun, aber es löst eine StackOverflow-Ausnahme aus. Was mache ich falsch?Warum verursacht die Eigenschaft Set StackOverflow-Ausnahme?

Telefonvorwahl

c.firstName = "a"; 

Objektnummer

public String firstName; 
{ 
    get 
    { 
     return firstName; 
    } 
    set 
    { 
     firstName = value; 
    } 
} 

Antwort

83

Es ist, weil Sie rekursiv die Eigenschaft aufrufen - in der set Sie setzen die Eigenschaft wieder, die infinitum Anzeige weiter, bis Sie blase den Stapel.

Sie benötigen ein privates Hintergrundfeld, um den Wert zu halten, z.

private string firstName; 

public string FirstName 
{ 
    get 
    { 
     return this.firstName; 
    } 
    set 
    { 
     this.firstName = value; 
    } 
} 

Alternativ, wenn Sie mit C# 3.0, könnten Sie eine Auto-Eigenschaft verwenden, die für Sie eine versteckte dahinter liegende Feld erzeugt, z.B.

public string FirstName { get; set; } 
+0

Sie haben einen Fehler in Ihrem ersten Beispiel. Entfernen Sie das Semikolon nach Vorname. Wählerisch, ich weiß. Nevermind, ich werde es beheben – Les

+0

Fixed ... nur 4 Jahre zu spät ;-) –

+9

Es ist nie zu spät, Bugs zu beheben :) –

12

Sie legen den Eigenschaftsnamen in Ihrer Eigenschaft fest - nicht den Feldnamen. Das würde besser funktionieren:

private m_firstName; 

public String firstName; 
{ 
    get 
    { 
     return m_firstName; 
    } 
    set 
    { 
     m_firstName = value; 
    } 
} 
+4

Ich habe diesen Fehler selbst gemacht ... –

+0

Es macht noch mehr Spaß, wenn Sie einen im Bibliothekscode eines Dritten finden ... –

Verwandte Themen