Zasada działania typów generycznych

0

Wiadomo, że standardowe kolekcje np. Arraylist podczas swojego działania konwertują wszystkie "wkładane" do niego dane na typ object przez co jeśli tych danych jest 10000 to możemy stracić na wydajności przez właśnie te transfery w pamięci:

 
int i = 123;
// The following line boxes i.
object o = i;  

source: msdn

Jak się ma sprawa w przypadku typów generycznych? Jak one działają na parametrze T?
Analizując ten kod IL:
il.PNG
widać wyraźnie proces boxingu w przypadku typu Arraylist natomiast przy typie generycznym List<T>, CLR pracuje jakby cały czas na Int32 czyli on jakby zamienia List<T> na List<int> i cały czas na tym pracuje bez żadnych konwersji na Object jak ma to miejsce w Javie?
Dobrze to rozumiem? Czy możecie coś jeszcze dopowiedzieć o zasadzie działania typu generycznego?

0

Dobrze rozumiesz.
List<int> trzyma dane typu int bez opakowywania w object.

W Javie tak to nie działa, każde <T> i tak docelowo jest traktowane jako Object.

0

W Javie typy generyczne istnieją tylko w czasie kompilacji (kodu Javowego do bajtkodu - w bajtkodzie już nie lądują).

0

Tutaj masz to dobrze wyjaśnione:
http://pdf.helion.pl/cshop2/cshop2.pdf

1 użytkowników online, w tym zalogowanych: 0, gości: 1