2012-04-04 18 views
7

Perché questo? Questo è il mio codice:Si è verificata un'eccezione non gestita di tipo "System.StackOverflowException"

public class KPage 
{ 
    public KPage() 
    { 
     this.Titolo = "example"; 
    } 

    public string Titolo 
    { 
     get { return Titolo; } 
     set { Titolo = value; } 
    } 
} 

I dati impostati dal costruttore. Così, mi piacerebbe fare quarantina come

KPage page = new KPage(); 
Response.Write(page.Titolo); 

ma ottengo che errore:

set { Titolo = value; } 
+1

possibile duplicato del [Sovraccarico getter e setter cause StackOverflow in C#] (http://stackoverflow.com/questions/1437791/overloading-getter-and-setter-causes -stackoverflow-in-c-sharp) o http://stackoverflow.com/questions/5676430/stackoverflowexception-was-unhandled – user7116

+7

Il getter Titolo utilizza la proprietà Titolo. Di chi getter usa la proprietà Titolo. Di chi getter usa la proprietà Titolo. Di chi getter usa la proprietà Titolo. Di chi getter usa la proprietà Titolo. Di chi getter usa la proprietà Titolo. Di chi getter usa la proprietà Titolo ... Kaboom. –

risposta

36

Hai un ciclo infinito qui:

public string Titolo 
{ 
    get { return Titolo; } 
    set { Titolo = value; } 
} 

Nel momento in cui si fa riferimento a Titolo nel tuo codice, il getter o setter chiama il getter che chiama il getter che chiama il getter che chiama il getter che chiama il getter ... Bam - StackOverflowException.

Utilizzare un campo di supporto o utilizzare auto implemented properties:

public string Titolo 
{ 
    get; 
    set; 
} 

Oppure:

private string titolo; 
public string Titolo 
{ 
    get { return titolo; } 
    set { titolo = value; } 
} 
2

Scelgo

public class KPage 
{ 
    public KPage() 
    { 
     this.Titolo = "example"; 
    } 

    public string Titolo 
    { 
     get; 
     set; 
    } 
} 
3

Si dispone di un setter autoreferenziale. Probabilmente significava utilizzare auto-proprietà:

public string Titolo 
{ 
    get; 
    set; 
} 
Problemi correlati