ドキュメントに従って:
public class Queue<T> : IEnumerable<T>, ICollection, IEnumerable
したがって、ジェネリック IEnumerable<T>
インターフェイスを実装しますが、非 ICollection
ジェネリック インターフェイスを実装します。
ICollection
名前の類似性に惑わされてはいけません。ICollection<T>
完全に別のインターフェイスです。このようなもの (一部のジェネリック インターフェイスを実装し、非ジェネリックな他のインターフェイスのみを実装する) は珍しいものですが、完全に正当です。
ICollection<T>
設計者が実際には .NET でサポートしたくないさまざまな側面があったと思いますが、同様に、人々が非ジェネリッククラスから簡単にアップグレードできるようQueue<T>
に実装したいと考えていました。ICollection
Queue
編集:デニスの回答に記載されているように、ICollection.CopyTo
で明示的に実装されていQueue<T>
ます。これは、 type の式を介してのみその署名に到達できるICollection
ことを意味します。例えば:
Queue<string> queue = new Queue<string>();
Array array = new Button[10];
queue.CopyTo(array, 0, queue.Count); // Compilation failure...
ICollection collection = (ICollection) queue;
collection.CopyTo(array, 0, queue.Count); // Compiles, but will go bang
厳密に型指定された配列を取るメソッドはを実装するのに有効ですICollection<T>.CopyTo
が、 のメソッドAdd
とRemove
メソッドはICollection<T>
存在しません。Enqueue
Dequeue