如果我在通过数据库填充自身的对象上有一个只读属性,这是我应该做的,还是有更好的方法来确保它已被评估过?
private List<Variable> _selectedVariables;
public new List<Variable> SelectedVariables
{
get
{
if (_selectedVariables == null)
{
_selectedVariables = SomeFunctionThatCallsDB();
}
return _selectedVariables;
}
}
答案 0 :(得分:2)
这对单个线程来说很好;但如果您遇到多线程的情况,那么您将遇到问题。
编辑:Threadsafing:
简单的线程安全模式:
private readonly object _objectLock = new object();
private List<T> _someList = null;
public List<T> MyStuff
{
get
{
if(_someList == null)
{
lock(_objectLock)
{
if(_someList == null)
_someList = LoadFromDB();
}
}
return _someList;
}
}
您检查是否设置,然后锁定,然后再次检查以确保您已覆盖竞争条件。