1

在 .NET 中使用内存缓存的许多 示例包括官方文档)将其实例化为:

private readonly ObjectCache memoryCache = MemoryCache.Default;

有什么理由更喜欢这个:

private readonly MemoryCache memoryCache = MemoryCache.Default;
4

3 回答 3

7

它类似于声明变量或接收类型参数Stream而不是FileStreamor MemoryStream:不必关心您拥有哪种实现的灵活性。

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

于 2019-03-22T17:06:18.260 回答
5

偏爱的原因ObjectCacheMemoryCacheSOLID 中的 L...

Liskov替换原则:

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

ObjectCache可以被它的任何子类型替换,包括MemoryCachewhileMemoryCache不能被任何强迫你进入特定实现的东西替换。

于 2019-03-22T18:01:02.623 回答
1

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

这样 MemoryCache 继承自 ObjectCache。对于日常使用,您将使用 MemoryCash。但是如果你想拥有你自己的,你可以从 objectCash 继承并编写你自己的方法。

public class MemoryCache : ObjectCache, 
IEnumerable, IDisposable
于 2019-03-22T17:14:46.453 回答