当一个对象将另一个对象作为属性保存时,该属性默认为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建议代码。
答案 0 :(得分:3)
这确实有效。第一次访问该属性时,_obj将填充新实例(因为它之前为null)。接下来调用,您将返回第一次初始化的相同Obj实例。
这是创建某种“延迟加载”的常用方法。
答案 1 :(得分:2)
应该有效。作为旁注,为简洁起见,您可以替换它:
get {
if(_obj == null)
_obj = new Obj();
return _obj;
}
......用这个:
get { return _obj ?? (_obj = new Obj()); }