为什么.NET Framework中没有IQueue <T>或IStack <T>接口?

Pau*_*ner 35 .net

我想编写一个在类似队列的界面上运行的对象.我去寻找IQueue<T>,但空手而归.

有以下与集合相关的接口:

  • ICollection<T>
  • IList<T>
  • IDictionary<TKey,TValue>
  • ISet<T>

是什么让这些类型的集合得到明确定义的接口?为什么堆栈和队列不保证接口?

And*_*rey 13

好吧,因为从这些接口到实现它们的类会有一对一的映射(除了最新的ConcurrentQueue).但是其他提到的接口有很多实现它们的类.

扩大一点.我们无法知道BCL团队的真正动机.但我有一种感觉,当他们创建Queue并且Stack这些类看起来如此微不足道时,他们决定不将它们抽象出接口.原因很明显:类看起来很简单但同时完成,因此没有理由在BCL中创建它们的不同实现.然后来了ConcurrentQueue,之前的声明变得有些不正确.

正如它指出的那样QueueConcurrentQueue没有那么多类似的使它们实现单一接口.

  • `ConcurrentQueue <T>`也有(大部分)与`Queue <T>`不同的语义; 他们唯一真正的共享抽象是"入队". (2认同)

Sam*_*eff 5

我认为 .NET 4 中新类的存在ConcurrentQueue<T>证明ConcurrentStack<T>了您的观点:应该有IQueue<T>接口IStack<T>。即使它们最初不存在,它们也应该被添加到 .NET 4 中。

过去,我不得不在 .NET 中创建自己的自定义 Stack 实现,并同意拥有一个标准接口会很有好处。