Если у меня есть этот объект, который имеет дочерний объект в качестве автоматического имущества:Когда автоматическое свойство инициализировано?
public class ParentObject
{
public ChildObject Child { get; set; } = new ChildObject();
}
В какой момент является Child
инициализируется? Во время строительства ParentObject
, или так же, как происходит первый «get» от ChildObject
?
Прошу, потому что я рассматриваю возможность переработать старый код Net 2. Старый код имеет явные поля аккомпанемента, как:
public class ParentObject
{
private ChildObject child;
public ChildObject Child
{
get { return this.child; }
set { this.child = value; }
}
}
..which означает, что Child
равно нулю, пока явно не установлено. Было бы хорошо, чтобы использовать новый стиль авто-свойства с по умолчанию Инициализатором (который приносит дополнительные преимущества в том, что нам не нужно делать проверки, такие как:
if (parentobject.Child == null) parentobject.Child = new Child();
Но если имущество ребенка инициализируется на строительство из родителя, то это «плохо» (не оптимально) для случаев, когда мы сериализуем и отправляем родительский объект (потенциально с пустым дочерним полем) по проводу.
Вы используете слово, созданное при инициализации. Свойства не создаются. У вас нет экземпляров свойств. – Servy
Э? Вы рефакторинг кода, который * никогда * явно не инициализирует определенное свойство. Конечно * любое * использование инициализации означает, что вы делаете что-то другое, так что это не рефакторинг. –
Кажется, что просто 'public ChildObject Child {get; задавать; } 'будет самым близким рефакторингом к оригиналу. – David