У меня странная привычка, кажется... по крайней мере, по моему коллеге. Мы вместе работаем над небольшим проектом. Способ, которым я писал классы, (упрощенный пример):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
Итак, в основном, я только инициализирую любое поле, когда вызывается геттер, и поле по-прежнему равно нулю. Я решил, что это уменьшит перегрузку, не инициализируя какие-либо свойства, которые нигде не используются.
ETA: Причина, по которой я сделал это, заключается в том, что мой класс имеет несколько свойств, которые возвращают экземпляр другого класса, который, в свою очередь, также имеет свойства с еще большим количеством классов и т.д. Вызов конструктора для верхнего класса впоследствии вызовет все конструкторы для всех этих классов, если они не всегда необходимы.
Есть ли возражения против этой практики, кроме личных предпочтений?
ОБНОВЛЕНИЕ: Я рассмотрел множество разных мнений по этому вопросу, и я буду придерживаться моего принятого ответа. Тем не менее, теперь я понял гораздо лучшее понимание концепции, и я могу решить, когда ее использовать, а когда нет.
Минусы:
- Проблемы безопасности потока
- Не подчиняется запросу "сеттер", когда переданное значение равно null
- Micro-оптимизации
- Обработка исключений должна выполняться в конструкторе
- Нужно проверить значение null в классе
Плюсы:
- Micro-оптимизации
- Свойства никогда не возвращают null
- Задержка или отказ от загрузки "тяжелых" объектов
Большинство минусов не применимы к моей текущей библиотеке, однако мне нужно будет проверить, действительно ли "микро-оптимизация" вообще что-то оптимизирует.
ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ:
Хорошо, я изменил свой ответ. Мой первоначальный вопрос заключался в том, является ли это хорошей привычкой. И теперь я уверен, что это не так. Возможно, я все равно буду использовать его в некоторых частях моего текущего кода, но не безоговорочно и определенно не все время. Поэтому я буду потерять свою привычку и подумать об этом, прежде чем использовать ее. Спасибо всем!