Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os modelos C# Generics e C++ são recursos de linguagem que dão suporte a tipos parametrizados. No entanto, há muitas diferenças entre os dois. No nível da sintaxe, os genéricos C# são uma abordagem mais simples para tipos parametrizados sem a complexidade dos modelos C++. Além disso, o C# não tenta fornecer todas as funcionalidades que os modelos C++ fornecem. No nível de implementação, a principal diferença é que as substituições de tipo genérico C# são executadas em tempo de execução e as informações de tipo genérico são preservadas para objetos instanciados. Para obter mais informações, consulte Genéricos no Runtime.
Veja a seguir as principais diferenças entre os modelos C# Generics e C++:
Os genéricos de C# não fornecem a mesma flexibilidade que os modelos C++. Por exemplo, não é possível chamar operadores aritméticos em uma classe genérica C#, embora seja possível chamar operadores definidos pelo usuário.
O C# não permite parâmetros de modelo sem tipo, como
template C<int i> {}.O C# não dá suporte à especialização explícita; ou seja, uma implementação personalizada de um modelo para um tipo específico.
O C# não dá suporte à especialização parcial: uma implementação personalizada para um subconjunto dos argumentos de tipo.
O C# não permite que o parâmetro de tipo seja usado como a classe base para o tipo genérico.
O C# não permite que parâmetros de tipo tenham tipos padrão.
No C#, um parâmetro de tipo genérico não pode ser genérico, embora os tipos construídos possam ser usados como genéricos. O C++ permite parâmetros de modelo.
O C++ permite código que pode não ser válido para todos os parâmetros de tipo no modelo, que é então verificado para o tipo específico usado como o parâmetro de tipo. O C# requer que o código em uma classe seja escrito de forma que funcione com qualquer tipo que atenda às restrições. Por exemplo, no C++ é possível escrever uma função que usa os operadores aritméticos
+e-objetos do parâmetro de tipo, o que produzirá um erro no momento da instanciação do modelo com um tipo que não dá suporte a esses operadores. O C# não permite isso; os únicos constructos de idioma permitidos são aqueles que podem ser deduzidos das restrições.