2008-12-15 23 views
33

Conozco Java y normalmente pongo métodos getter/setter. Estoy interesado en hacerlo en C# con el siguiente código, pero arroja una excepción de StackOverflow. ¿Qué estoy haciendo mal?¿Por qué Property Set arroja la excepción StackOverflow?

Llamar código

c.firstName = "a"; 

Código de Propiedad

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

Respuesta

83

Es porque estás recursiva llamando a la propiedad - en el set está configurando la propiedad de nuevo, que continúa ad infinitum hasta que se volar la pila.

Necesita un campo de respaldo privado para mantener el valor, p.

private string firstName; 

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

Alternativamente, si usted está usando C# 3.0, se puede usar un auto-propiedad, que crea un campo oculto respaldo para usted, por ejemplo,

public string FirstName { get; set; } 
+0

Tiene un error en su primer ejemplo. Elimine el punto y coma después de FirstName. Picky, lo sé. No importa, lo arreglaré – Les

+0

Solucionado ... solo 4 años tarde ;-) –

+9

Nunca es demasiado tarde para corregir errores :) –

12

se está ajustando el nombre de la propiedad dentro de su propiedad - no el nombre del campo. Esto funcionaría mejor:

private m_firstName; 

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

He cometido este error yo mismo ... –

+0

Es incluso más divertido cuando encuentras uno en el código de la biblioteca de un tercero ... –

Cuestiones relacionadas