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