Nel mio ultimo post si è parlato di Generics. Tra i commnenti chiedeva quali sono le differenze rispetto ai Template del C++.
La differenza, sebbene poco visibile al programmatore, c'è.
In C++ una classe template viene convertita nella rispettiva classe che opera sul tipo usato come parametro durante la compilazione. In pratica tutte le occorrenze di Stack vengono convertite dal compilatore effettuando di fatto una sostituzione nel codice.
In C# invece i tipi generics vengono gestiti durante l'esecuzione, quando il jitter si trova a dover eseguire una classe Stack crea la classe stack che opera sul tipo int in codice IL e ogni volta che trova del nuovo codice che opera sullo stesso tipo (Stack) riutilizzerà quello generato in precedenza.
Quindi il runtime crea un unico tipo specializzato per ogni classe generics che ha come parametro un value type (uno per Stack uno per Stack ecc…). E per i reference type?
Per i reference type il runtime condivide un'unica copia per tutti…alla fine "puntatori sono" ;-)