Differences Between C++ Templates and C# Generics (C# Programming Guide)
Os modelos de C# genéricos e C++ são ambos os recursos de linguagem que oferecem suporte para tipos parametrizados. No entanto, há muitas diferenças entre os dois. No nível da sintaxe, C# os genéricos são uma abordagem mais simples para tipos parametrizados sem a complexidade de modelos C++. Além disso, C# não tenta fornecer toda a funcionalidade que fornecem a modelos C++. No nível de implementação, a principal diferença é que as substituições de tipo genérico C# são realizadas em tempo de execução e informações de tipo genérico, assim, são preservadas para objetos instanciados. Para obter mais informações, consulte Genéricos no Executar Hora (guia de programação C#).
Estas são as principais diferenças entre C# genéricos e de modelos C++:
C# genéricos não fornecem a mesma quantidade de flexibilidade como modelos C++. Por exemplo, não é possível chamar os operadores aritméticos em uma C# classe genérica, embora seja possível chamar os operadores definidos pelo usuário.
C# não aceita parâmetros de modelo de não-tipo, como template C<int i> {}.
C# não oferece suporte a especialização explícita; ou seja, uma implementação personalizada de um modelo para um tipo específico.
C# não dá suporte a especialização parcial: uma implementação personalizada para um subconjunto dos argumentos de tipo.
C# não aceita o parâmetro de tipo a ser usado como a classe base para o tipo genérico.
C# não aceita parâmetros de tipo ter tipos padrão.
No C#, um parâmetro de tipo genérico não pode ser um genérico, embora tipos construídos podem ser usados como genéricos. C++ permitem que os parâmetros de modelo.
C++ permite que o código pode não ser válido para todos os parâmetros de tipo no modelo, em seguida, é verificado para o tipo específico usado como o parâmetro de tipo. C# requer o código em uma classe a ser escrito de tal forma que ele funcionará com qualquer tipo que satisfaça as restrições. Por exemplo, em C++ é possível escrever uma função que usa os operadores aritméticos + e - em objetos de parâmetro de tipo, que produzirá um erro no momento da instanciação do modelo com um tipo que não suporta esses operadores. Não C# permite isso. as construções de linguagem única permitidas são aqueles que pode ser deduzido a partir de restrições.
Consulte também
Referência
Introduction to Generics (C# Programming Guide)