Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I generics C# e i modelli C++ sono entrambe funzionalità del linguaggio che forniscono supporto per i tipi con parametri. Tuttavia, esistono molte differenze tra i due. A livello di sintassi, i generics C# sono un approccio più semplice ai tipi con parametri senza la complessità dei modelli C++. Inoltre, C# non tenta di fornire tutte le funzionalità fornite dai modelli C++. A livello di implementazione, la differenza principale è che le sostituzioni di tipi generici C# vengono eseguite in fase di esecuzione e le informazioni sul tipo generico vengono quindi mantenute per gli oggetti di cui è stata creata un'istanza. Per altre informazioni, vedere Generics in runtime.
Di seguito sono riportate le differenze principali tra i generics C# e i modelli C++:
I generics C# non offrono la stessa flessibilità dei modelli C++. Ad esempio, non è possibile chiamare operatori aritmetici in una classe generica C#, anche se è possibile chiamare operatori definiti dall'utente.
C# non consente parametri di modello non di tipo, ad esempio
template C<int i> {}
.C# non supporta la specializzazione esplicita; ovvero un'implementazione personalizzata di un modello per un tipo specifico.
C# non supporta la specializzazione parziale: un'implementazione personalizzata per un subset degli argomenti di tipo.
C# non consente l'uso del parametro di tipo come classe di base per il tipo generico.
C# non consente ai parametri di tipo di avere tipi predefiniti.
In C#, un parametro di tipo generico non può essere un generico, anche se i tipi costruiti possono essere usati come generics. C++ consente parametri di modello.
C++ consente il codice che potrebbe non essere valido per tutti i parametri di tipo nel modello, che viene quindi controllato per il tipo specifico usato come parametro di tipo. C# richiede che il codice in una classe venga scritto in modo che funzioni con qualsiasi tipo che soddisfi i vincoli. Ad esempio, in C++ è possibile scrivere una funzione che usa gli operatori
+
aritmetici e-
sugli oggetti del parametro di tipo, che genererà un errore al momento della creazione di istanze del modello con un tipo che non supporta questi operatori. C# non consente questo; Gli unici costrutti di linguaggio consentiti sono quelli che possono essere dedotti dai vincoli.