如果我访问一个对象的属性,它会自动初始化

本文关键字:初始化 属性 访问 一个对象 如果 | 更新日期: 2023-09-27 18:10:54

当一个对象将另一个对象作为属性并且该属性默认为null时。如果它自己的属性被代码访问,这个属性会被初始化吗?

public User {
    private _obj = null;
    public Obj SomeObject {
        get { return _obj ?? (_obj = new Obj()); }
        set { _obj = value; }
    }
    public User() {
        //do stuff
    }
}

正在使用的代码

User user = new User();
int x = user.SomeObject.SomeIntValue;

如果SomeObject为空,会启动一个新版本的SomeObject吗?

——编辑——将@Kjartan建议应用到代码中

如果我访问一个对象的属性,它会自动初始化

这确实可以工作。第一次访问该属性时,_obj将被新的实例填充(因为它之前是空的)。在接下来的调用中,您将返回第一次初始化的Obj实例。

这是创建某种"延迟加载"的常用方法。

应该可以。作为旁注,为了简洁起见,您可以替换为:

 get {
      if(_obj == null)
           _obj = new Obj();
      return _obj;
 }

…用这个:

  get { return _obj ?? (_obj = new Obj()); }