【发布时间】:2011-02-04 11:29:46
【问题描述】:
我有一个对象,其属性的计算成本很高,因此它们仅在首次访问时计算,然后被缓存。
private List<Note> notes;
public List<Note> Notes
{
get
{
if (this.notes == null)
{
this.notes = CalcNotes();
}
return this.notes;
}
}
我想知道,有没有更好的方法来做到这一点?是否有可能在 C# 中创建缓存属性或类似的东西?
【问题讨论】:
-
我在这里唯一要注意的是,虽然该属性可能看起来是只读的,但 List 是一个可变对象,因此获得引用的任何人都可以更改它。他们不能使私有成员为空,但他们可以使 List 为空。如果您可以摆脱它,我会返回一个 IEnumerable 或其他东西。但这不是你的直接问题。 Oded 所说的对我来说似乎没问题。
-
@Kevin:
ReadOnlyCollection<Note>在这里也是一个不错的选择(可以说更好,因为它提供索引并且整个数组都可用)。 -
除了原始帖子之外,就“关注点分离”而言,如果能够有一个只正常返回数据的类,然后是一个处理的子类,那就太好了缓存数据。除了手动完成之外,似乎没有一种很好的方法来实现这一点。有人吗?
标签: c# caching properties