hrvojko Ответов: 2

Интерфейс ICollection в качестве параметра метода


I use method AddRange from the class ArrayList and I found example:

ArrayList myAL = new ArrayList(); 
Queue myQueue = new Queue();
myQueue.Enqueue( "jumped" );
myQueue.Enqueue( "over" );
myQueue.Enqueue( "the" );
myQueue.Enqueue( "lazy" );
myQueue.Enqueue( "dog" );

// Copies the Queue elements to the end of the ArrayList.
myAL.AddRange( myQueue );

AddRange has a Parameter of type ICollection, but in example I can give Queue class(probably because Queue class is inheritad from interface ICollection). Can somebode explain me what happens at call AddRange and copy Queue class type in interface type ICollection.What happens exactly on the heap and on the stack with data types?Thanks.


Что я уже пробовал:

Я попробовал код и работает. Но я не понимаю, как класс объекта преобразуется в тип ICollection?

2 Ответов

Рейтинг:
2

CPallini

Цитата:
Но я не понимаю, как класс объекта преобразуется в тип ICollection
Это не так преобразованный. С тех пор как он инвентарь то ICollection интерфейс (it не наследует от ICollection) затем AddRange может безопасно вызывать любой метод (или использовать любое свойство) ICollection интерфейс при предоставлении с Queue ссылка.


Рейтинг:
1

F-ES Sitecore

В стеке или куче ничего не происходит. Тот факт, что очередь реализует (а не наследует) ICollection-Это гарантия того, что любой метод ICollection может быть выполнен на объекте Queue. Таким образом, AddRange говорит, что он примет любой объект, который, как он знает, он может рассматривать как коллекцию, то есть он может вызвать GetEnumerator on, и, реализуя очередь ICollection, говорит: "Я гарантирую, что если вы вызовете GetEnumerator on me, я верну то, что вы ожидаете".