Чета я теперь совсем запутался!
если тип ссылочный то он храниться в куче.
если тип int - тип по значению - то он хранится в стеке. NET Framework позволяет приводить типы (кастинг) - в наше случае мы же не приводим int к object (т.е. в моей книге это называется упаковкой Boxing/Unboxing), а упаковываем int в object.
поскольку object тип по ссылке, данные будут храниться в куче
и значит если int i = 5; значение переменной i = 5;, то после
object x = (object)i; в переменной x будет ссылка на ячейку памяти в управляемой куче.
Так вот здесь положительным образом и проявляются обощенные классы (Generic).
List<int> тогда будет строго типизирован (или даже оптимизированн для работы int) - следовательно для добавления и для чтения елементов в и из списка не потребуется операций (Упаковки/распаковки) элементов в object и обратно в int.
вот собственно так описана теория в
Professional C# 2005 with .NET 3.0
Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner
ISBN: 978-0-470-12472-7
Для простоты оставим в покое делегатов, методы и класы.
Вот мне и хотелось узнать какова реальная потеря производительности от этих упаковок и распаковок - потому то я попробовал замерить - однако результат мне ничего не сказал. Теоретически я в полне понимаю что она есть однако насколько велик выигрыш - это было мне интересно.
Ну да ладно у обобщенных классов есть столько преимуществ - что только ради них и стоит их использовать.
хотя- бы ради этого
- Код: Выделить всё
list.ForEach(delegate(int i) {Console.WriteLine(i);});
Думаю вопрос исчерпан.
спасибо за инфу.