es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué no puedo utilizar los getters y setters implementados automáticamente con una lista? (Unity, C#)

Estoy tratando de entender mejor los getters y setters.

Sé que puedo usar getters y setters implementados automáticamente, como public Vector3 Position { get; set; }, como una forma abreviada de

private Vector3 _position;
public Vector3 Position
{ 
    get {return _position;} 
    set{_position = value;} 
}

PERO no puedo entender por qué eso no funciona para Listas. Si intento declarar una lista de la siguiente manera:

List<vector3> Positions { get; set;}

Unity me lanza una excepción de referencia nula.

Pero si uso la forma larga:

private List<vector3> _position = new List<vector3>();
public List<vector3> Position
{ 
    get {return _position;} 
    set{_position = value;} 
}

Funciona perfectamente. Supongo que esto tiene algo que ver con la forma en que se declaran las listas, pero me gustaría saber qué es exactamente lo que está sucediendo aquí.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que los getters y setters implementados automáticamente no funcionan para Listas es porque la sintaxis abreviada solo crea un método getter y setter para la propiedad, pero no crea en realidad una instancia de la Lista en sí. Por lo tanto, cuando intentas acceder a la Lista utilizando la sintaxis abreviada, obtienes una excepción de referencia nula porque la Lista aún no ha sido creada.

    En contraste, cuando utilizas la sintaxis en forma larga, no solo creas los métodos getter y setter para la propiedad, sino que también creas una instancia de la Lista en sí y la asignas al campo privado. Esto asegura que la Lista siempre esté inicializada cuando accedes a la propiedad.

    En resumen, aunque los getters y setters implementados automáticamente son una forma conveniente de escribir propiedades simples, no funcionan para propiedades que requieren una inicialización más compleja, como las Listas. En esos casos, es necesario utilizar la sintaxis en forma larga para asegurar que la propiedad esté correctamente inicializada.

Comments are closed.