如果我访问该对象属性,是否会自动初始化类属性?

时间:2013-04-24 14:30:21

标签: c# class properties

当一个对象将另一个对象作为属性保存时,该属性默认为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为null,它会启动新版本的SomeObject吗?

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

......用这个:

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