如果我在一个对象上有一个只读属性,通过DB填充自己,这是我应该做的,还是有更好的方法来确保它已经被评估?
private List<Variable> _selectedVariables;
public new List<Variable> SelectedVariables
{
get
{
if (_selectedVariables == null)
{
_selectedVariables = SomeFunctionThatCallsDB();
}
return _selectedVariables;
}
}
这对于单个线程来说是很好的;但你会有问题,如果这将是在一个情况下,你有多线程得到。
编辑:Threadsafing:简单的Threadsafe模式:
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;
}
}
检查是否设置,然后锁定,然后再次检查以确保覆盖了竞争条件。