Parece que tengo una extraña costumbre ... al menos según mi compañero de trabajo. Hemos estado trabajando juntos en un pequeño proyecto. La forma en que escribí las clases es (ejemplo simplificado):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
Entonces, básicamente, solo inicializo cualquier campo cuando se llama a un captador y el campo sigue siendo nulo. Pensé que esto reduciría la sobrecarga al no inicializar ninguna propiedad que no se use en ningún lado.
ETA: La razón por la que hice esto es que mi clase tiene varias propiedades que devuelven una instancia de otra clase, que a su vez también tiene propiedades con aún más clases, y así sucesivamente. Llamar al constructor para la clase superior posteriormente llamaría a todos los constructores para todas estas clases, cuando no siempre son todos necesarios.
¿Hay alguna objeción contra esta práctica, aparte de la preferencia personal?
ACTUALIZACIÓN: He considerado las diferentes opiniones con respecto a esta pregunta y mantendré mi respuesta aceptada. Sin embargo, ahora he llegado a comprender mucho mejor el concepto y puedo decidir cuándo usarlo y cuándo no.
Contras:
- Temas de seguridad de hilos
- No obedecer una solicitud de "establecedor" cuando el valor pasado es nulo
- Micro optimizaciones
- El manejo de excepciones debe tener lugar en un constructor
- Necesito verificar si hay un código nulo en la clase
Pros:
- Micro optimizaciones
- Las propiedades nunca devuelven nulo
- Retrasar o evitar cargar objetos "pesados"
La mayoría de las desventajas no son aplicables a mi biblioteca actual, sin embargo, tendría que probar para ver si las "microoptimizaciones" realmente están optimizando algo.
ÚLTIMA ACTUALIZACIÓN:
Bien, cambié mi respuesta. Mi pregunta original era si este es un buen hábito o no. Y ahora estoy convencido de que no lo es. Tal vez aún lo usaré en algunas partes de mi código actual, pero no incondicionalmente y definitivamente no todo el tiempo. Así que voy a perder mi hábito y pensarlo antes de usarlo. ¡Gracias a todos!