Parece que tenho um hábito estranho ... pelo menos de acordo com meu colega de trabalho. Estamos trabalhando juntos em um pequeno projeto. A maneira como escrevi as aulas é (exemplo 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; }
}
}
Então, basicamente, eu apenas inicializo qualquer campo quando um getter é chamado e o campo ainda é nulo. Imaginei que isso reduziria a sobrecarga ao não inicializar nenhuma propriedade que não fosse usada em nenhum lugar.
ETA: A razão pela qual fiz isso é que minha classe tem várias propriedades que retornam uma instância de outra classe, que por sua vez também possuem propriedades com mais classes e assim por diante. Chamar o construtor para a classe superior subseqüentemente chamaria todos os construtores para todas essas classes, quando elas nem sempre são necessárias.
Há alguma objeção contra essa prática, além da preferência pessoal?
ATUALIZAÇÃO: Eu considerei as muitas opiniões divergentes em relação a esta pergunta e defenderei minha resposta aceita. No entanto, agora cheguei a um entendimento muito melhor do conceito e sou capaz de decidir quando usá-lo e quando não.
Contras:
- Problemas de segurança do thread
- Não obedecendo a uma solicitação "setter" quando o valor passado é nulo
- Micro-otimizações
- O tratamento de exceção deve ocorrer em um construtor
- Precisa verificar o código nulo na classe '
Prós:
- Micro-otimizações
- Propriedades nunca retornam nulas
- Atraso ou evitar o carregamento de objetos "pesados"
A maioria dos contras não é aplicável à minha biblioteca atual, no entanto, eu teria que testar para ver se as "micro-otimizações" estão realmente otimizando alguma coisa.
ÚLTIMA ATUALIZAÇÃO:
Ok, mudei minha resposta. Minha pergunta original era se esse é um bom hábito ou não. E agora estou convencido de que não é. Talvez eu ainda o use em algumas partes do meu código atual, mas não incondicionalmente e definitivamente não o tempo todo. Então, vou perder meu hábito e pensar sobre isso antes de usá-lo. Obrigado a todos!