Premetto che non ho letto e trovato niente a riguardo e che non l'ho scritto io il CLR (non si era capito :-D).
Pian piano comincio a prendere la mano con i Generics. Se si pensa che sono normali tipi o metodi ma con un placeHolder per il tipo la cosa sembra semplice, ma cominciate a domandarvi come si comportano i membri statici? come si fa l'overload e l'hide? come si istanzia un placeHolder? Diventa già più insolito come ragionamento.
Detto questo mi domando: quando usare i Generics? Il Jitter crea per ogni tipo di valore una copia della classe e la specializza, mentre per i tipi di riferimento usa un'unica classe poiché il tipo non è fondamentale, i riferimenti sono infatti pointer di 32 bit ad una zona del Managed Heap.
Se mi serve una collezione ho 3 strade:
- Utilizzare classi generiche tipo un ArrayList (o classi simili);
- Creare una collezione apposita che lavora sul mio tipo;
- Utilizzare una collezione che fa uso dei Generics (es: List
) istanziandola col mio tipo.
Dall'osservazione di prima deduco che l'uso dei generics sia sicuramente migliore rispetto alla prima soluzione. Non dobbiamo fare casting, controllo sui tipi e né boxing/unboxing e credo che il lavoro per prepare la classe alla prima istanza sia trascurabile.
Ovvio che l'uso di una collezione apposita è la migliore, ma ci occupa più tempo. Viceversa è inutile creare una collezione che fa uso dei Generics per poi sfruttarla con un solo tipo. Un approccio può essere quello misto: creo una collezione custom che fa uso sottostante di un List
Spesso dò un'occhiata al Framework per vedere come lavorano i programmatori Microsoft. Se non lo sanno loro il miglior modo di fare... anche se non sempre è così. La collezione System.Web.UI.ControlCollection è rimasta invariata. In effetti lavora specificamente su Control, non aveva senso riscriverla e quindi neanche usare un List
Sicuramente il tempo ci consentirà di perfezionarne nel loro uso ;-)
UPDATE: Daniele mi corregge sempre...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Silverlight e versioni CLR, il 28 agosto 2007 alle 13:49
- Intercettare il reciclo di un'applicazione ASP.NET, il 25 settembre 2006 alle 22:42
- User e custom controls, WebParts, il 15 giugno 2006 alle 20:52
- Capitolo 10 tutto su ObjectDataSource, il 6 giugno 2006 alle 23:03
- ASP.NET 2.0 per tutti: capitolo 9 pronto, il 28 maggio 2006 alle 22:55
- Gestione dei Threads in ASP.NET, il 19 aprile 2006 alle 21:36