In c++, quando utilizziamo un template (prendiamo ad esempio il tipo std::vector), è pratica abbastanza diffusa definire un nuovo tipo del template specializzato.
Qualcosa di questo tipo per intenderci:
typedef std::vector IntVector;
Come sappiamo usare un template (o un tipo generico del framework) allunga incredibilmente il nome del tipo e risulta molto scomodo dover ripetere lo stesso nome per intero ad ogni cast, istanziazione etc etc. Esiste qualcosa di simile al tipedef anche in C#? La risposta è si, ma tenendo ben presente l'aggettivo SIMILE. In C# possiamo definire un alias utilizzando la key using. La "dichiarazione duale del tipo IntVector di c++, in c# sarebbe:
using IntList = System.Collection.Generic.List;
Leggere attentamente le avvertenze: lo statement using, come avviene con i namespace, definisce solo un alias, non esiste un vero e proprio equivalente del typedef del c++. Questo è supportato dal fatto che, una volta compilato il codice, nel nostro assembly non esisterà nessun metadata che fa riferimento al tipo IntList. Se proprio vogliamo definire un tipo specializzato del generic dobbiamo creare una classe che eredita dalla versione specializzata del tipo generico(magari può essere utile un codesnippet per questo).