1

当一个对象将另一个对象作为属性并且该属性默认为 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 吗?

-- 编辑 -- 将@Kjartan 建议应用于代码。

4

2 回答 2

3

这确实会奏效。第一次访问该属性时,_obj 将被新实例填充(因为它之前为 null)。下一次调用,您将返回第一次初始化的同一个 Obj 实例。

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

于 2013-04-24T14:34:08.890 回答
2

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

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

...有了这个:

  get { return _obj ?? (_obj = new Obj()); }
于 2013-04-24T14:44:33.867 回答