c# – Queue实际实现了什么
在尝试通过包装通用队列来实现我自己的Queue时,我注意到Queue实现了ICollection.但是,ICollection.CopyTo的方法签名如下
void CopyTo( Array array,int index) 而通用Queue.CopyTo的方法签名是 public void CopyTo( T[] array,int arrayIndex) 这与ICollection.CopyTo的通用版本的签名相同.我的困惑来自于通用队列似乎没有实现通用ICollection,而是实现标准ICollection.那到底是怎么回事? 解决方法
按照
the documentation:
public class Queue<T> : IEnumerable<T>,ICollection,IEnumerable 因此它实现了通用的IEnumerable< T>接口,但非通用的ICollection接口. 不要让名字的相似性欺骗你 – ICollection和ICollection< T>是完全独立的接口,虽然像这样(实现一些通用接口,但只有非通用的其他接口)是不寻常的,它是完全合法的. 我怀疑ICollection的各个方面< T>设计者真的不想在Queue< T>中支持,但同样他们想要实现ICollection以允许人们无痛地从非通用 编辑:如Dennis的回答所述, Queue<string> queue = new Queue<string>(); Array array = new Button[10]; queue.CopyTo(array,queue.Count); // Compilation failure... ICollection collection = (ICollection) queue; collection.CopyTo(array,queue.Count); // Compiles,but will go bang 采用强类型数组的方法对于实现 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |