So many examples在.NET(including the official docs)中使用内存缓存的实例如下:
private readonly ObjectCache memoryCache = MemoryCache.Default;
是否有任何理由更喜欢此:
private readonly MemoryCache memoryCache = MemoryCache.Default;
答案 0 :(得分:5)
这类似于声明变量或接收类型为Stream
而不是FileStream
或MemoryStream
的参数:无需关心您拥有哪种实现的灵活性。
ObjectCache
是MemoryCache
的基类。在实例化时,您正在创建一个特定的实现,但是在代码的其他地方,使用哪个实现则无关紧要。重要的是基类提供的通用接口。您可以更改实例化以创建其他类型,并且不必修改使用缓存的代码。
答案 1 :(得分:3)
相对于ObjectCache
更喜欢MemoryCache
的原因是SOLID中的L ...
利斯科夫替代原则:
程序中的对象应可替换为其实例 亚型,而不会改变该程序的正确性。
ObjectCache
可以用其任何子类型来替换,包括MemoryCache
,而MemoryCache
则不能用任何迫使您执行特定实现的方法来替换。
答案 2 :(得分:1)
ObjectCache是一个抽象类,因此您无法直接实例化它,并演示了如何构建符合编写ObjectCache的人希望您遵守的规则的Cache。
以便MemoryCache继承自ObjectCache。对于日常使用,您可以使用MemoryCashe。但是,如果您想要自己的,可以从objectCashe继承并编写自己的方法。
public class MemoryCache : ObjectCache,
IEnumerable, IDisposable