在.NET中,为什么ObjectCache比MemoryCache是​​首选类型?

时间:2019-03-22 16:59:19

标签: c# .net memorycache objectcache

So many examples在.NET(including the official docs)中使用内存缓存的实例如下:

private readonly ObjectCache memoryCache = MemoryCache.Default;

是否有任何理由更喜欢此:

private readonly MemoryCache memoryCache = MemoryCache.Default;

3 个答案:

答案 0 :(得分:5)

这类似于声明变量或接收类型为Stream而不是FileStreamMemoryStream的参数:无需关心您拥有哪种实现的灵活性。

ObjectCacheMemoryCache的基类。在实例化时,您正在创建一个特定的实现,但是在代码的其他地方,使用哪个实现则无关紧要。重要的是基类提供的通用接口。您可以更改实例化以创建其他类型,并且不必修改使用缓存的代码。

答案 1 :(得分:3)

相对于ObjectCache更喜欢MemoryCache的原因是SOLID中的L ...

利斯科夫替代原则:

  

程序中的对象应可替换为其实例   亚型,而不会改变该程序的正确性。

ObjectCache可以用其任何子类型来替换,包括MemoryCache,而MemoryCache则不能用任何迫使您执行特定实现的方法来替换。

答案 2 :(得分:1)

ObjectCache是​​一个抽象类,因此您无法直接实例化它,并演示了如何构建符合编写ObjectCache的人希望您遵守的规则的Cache。

以便MemoryCache继承自ObjectCache。对于日常使用,您可以使用MemoryCashe。但是,如果您想要自己的,可以从objectCashe继承并编写自己的方法。

public class MemoryCache : ObjectCache, 
IEnumerable, IDisposable