Partilhar via


Diferenças entre modelos C++ e genéricos C# (Guia de Programação em C#)

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 em tempo de execução (Guia de Programação em C#).

Estas são as principais diferenças entre modelos de C++ e C# genéricos:

  • C# os 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 tipo não modelo, 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 oferece 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 construídos tipos podem ser usados como genéricos. C++ permitem que os parâmetros de modelo.

  • C++ permite que o código que 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 para ser escrito de 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 do parâmetro de tipo, que produzirá um erro no momento da instanciação do modelo com um tipo que não oferece suporte a 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

Introdução aos genéricos (Guia de Programação em C#)

Conceitos

Guia de Programação em C#

Outros recursos

Modelos