如果我访问一个对象的属性,它会自动初始化
本文关键字:初始化 属性 访问 一个对象 如果 | 更新日期: 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()); }