gpt4 book ai didi

c# - 什么时候初始化自动属性?

转载 作者:行者123 更新时间:2023-11-30 21:49:25 25 4
gpt4 key购买 nike

如果我有这个对象,它有一个子对象作为自动属性:

public class ParentObject
{
public ChildObject Child { get; set; } = new ChildObject();
}

Child 是在什么时候初始化的?在 ParentObject 的构建过程中,还是在第一次“获取”ChildObject 时?

我问是因为我正在考虑重新编写一些旧的 Net 2 代码。旧代码具有明确的支持字段,例如:

public class ParentObject
{
private ChildObject child;

public ChildObject Child
{
get { return this.child; }
set { this.child = value; }
}
}

..这意味着 Child 在明确设置之前为 null。将新样式的自动属性与默认初始化程序一起使用会很好(这带来了更多好处,因为我们不需要进行检查,例如:

if (parentobject.Child == null) parentobject.Child = new Child();

但是,如果子属性是在构建父属性时初始化的,那么对于我们序列化并通过网络发送父对象(可能带有空子字段)的情况,它是“糟糕的”(不是最佳的)。

最佳答案

属性——特别是编译器创建的底层支持字段——在实例化 ParentObject 时(就在执行构造函数之前)初始化。这与带有初始值设定项的普通字段类似(例如 private ChildObject child = new ChildObject();)。

因此,正如您正确指出的那样,这不是重构现有代码的正确方法。您应该简单地省略初始化程序:

public class ParentObject
{
public ChildObject Child { get; set; }
}

... 导致我们在 C# 3.0 中引入了原始的自动属性语法,我们已经了解并喜爱它(在属性初始化器等新东西出现之前)。

关于c# - 什么时候初始化自动属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36943766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com