创建或返回缓存的对象

时间:2014-12-17 13:03:19

标签: c# caching design-patterns

我发现自己写了很多像这样的代码:

private Foo _CacheFoo;

public Foo GetFoo() {
  if (this._CacheFoo == null) {
    this._CacheFoo = new Foo();
  }
  return this.CacheFoo;
}

private Bar _CacheBar;

public Bar GetBar() {
  if (this._CacheBar == null) {
    this._CacheBar = new Bar();
  }
  return this._CacheBar;
}

我想知道是否有一种合理的方法来封装缓存部分。

2 个答案:

答案 0 :(得分:2)

您可以使用Lazy<T>

private Lazy<Foo> _foo = new Lazy<Foo>(() => new Foo());
public Foo GetFoo()
{
    return _foo.Value;
}

虽然每个要返回的实例的类型仍然相对较多。

答案 1 :(得分:1)

好吧,你可以使用一些语法糖,它会略微减少代码量:

private Foo _CacheFoo;
public Foo GetFoo()
{
    return _CacheFoo ?? (_CacheFoo = new Foo());
}