Extensões de componentes para .NET e UWP
O padrão C++ permite que os fornecedores de compiladores forneçam extensões não padrão para a linguagem. A Microsoft fornece extensões para ajudar você a conectar o código C++ nativo ao código executado no .NET Framework ou na Plataforma Universal do Windows (UWP). As extensões .NET são chamadas de C++/CLI e geram um código que é executado no ambiente de execução gerenciado pelo .NET, chamado de Common Language Runtime (CLR). As extensões da UWP são chamadas de C++ /CX e geram um código de máquina nativo.
Observação
Para novos aplicativos, recomendamos o uso de C++/WinRT em vez de C++/CX. C++/WinRT é uma nova projeção de linguagem padrão C++17 para APIs do Windows Runtime. Continuaremos a dar suporte a C++/CX e WRL, mas recomendamos que os novos aplicativos usem o C++/WinRT. Para obter mais informações, confira C++/WinRT.
Dois runtimes, um conjunto de extensões
A C++/CLI amplia o padrão ISO/ANSI de C++ e é definida sob o padrão Ecma C++/CLI. Saiba mais em Programação do .NET C++/CLI (Visual C++).
As extensões C++/CX são um subconjunto de C++/CLI. Embora a sintaxe da extensão seja idêntica na maioria dos casos, o código gerado depende de você especificar a opção de compilador /ZW
para o UWP de destino ou a opção /clr
para o .NET de destino. Essas opções são definidas automaticamente quando você usa o Visual Studio para criar um projeto.
Palavras-chave do tipo de dados
As extensões de linguagem incluem palavras-chave agregadas, que consistem em dois tokens separados por espaço em branco. Os tokens podem ter um significado quando são usados separadamente e outro significado quando são usados juntos. Por exemplo, a palavra "ref" é um identificador comum e a palavra "class" é uma palavra-chave que declara uma classe nativa. Mas quando essas palavras são combinadas para formar ref class, a palavra-chave agregada resultante declara uma entidade que é conhecida como classe de runtime.
As extensões também incluem palavras-chave contextuais. Uma palavra-chave é tratada como contextual dependendo do tipo de instrução que a contém e de seu posicionamento nessa instrução. Por exemplo, o token "propriedade" pode ser um identificador ou pode declarar um tipo especial de membro de classe pública.
A tabela a seguir lista palavras-chave na extensão de linguagem C++.
Palavra-chave | Contextual | Finalidade | Referência |
---|---|---|---|
ref class ref struct |
Não | Declara uma classe. | Classes e Structs |
value class value struct |
Não | Declara uma classe de valor. | Classes e Structs |
classe de interface interface struct |
Não | Declara uma interface. | classe de interface |
enum class enum struct |
Não | Declara uma enumeração. | enum class |
property |
Sim | Declara uma propriedade. | property |
delegate | Sim | Declara um delegado. | delegate (C++/CLI e C++/CX) |
event | Sim | Declara um evento. | event |
Especificadores de substituição
Você pode usar as seguintes palavras-chave para qualificar o comportamento de substituição para derivação. Embora a palavra-chave new
não seja uma extensão de C++, ela é listada aqui porque pode ser usada em um contexto adicional. Alguns especificadores também são válidos para programação nativa. Para obter mais informações, confira Como declarar especificadores de substituição em compilações nativas (C++/CLI).
Palavra-chave | Contextual | Finalidade | Referência |
---|---|---|---|
abstract | Sim | Indica que as funções ou classes são abstratas. | abstract |
new |
Não | Indica que uma função não é uma substituição de uma versão de classe base. | novo (novo slot em vtable) |
override | Sim | Indica que um método deve ser uma substituição de uma versão de classe base. | override |
sealed | Sim | Impede que classes sejam usadas como classes base. | sealed |
Palavras-chave para genéricos
As seguintes palavras-chave foram adicionadas para serem compatíveis com tipos genéricos. Para obter mais informações, consulte Genéricos.
Palavra-chave | Contextual | Finalidade |
---|---|---|
generic | Não | Declara um tipo genérico. |
where | Sim | Especifica as restrições aplicadas a um parâmetro de tipo genérico. |
Palavras-chave diversas
As seguintes palavras-chave foram adicionadas às extensões C++.
Palavra-chave | Contextual | Finalidade | Referência |
---|---|---|---|
finally | Sim | Indica o comportamento de tratamento de exceção padrão. | Tratamento de exceção |
for each, in | Não | Enumera elementos de uma coleção. | for each, in |
gcnew | Não | Aloca os tipos no heap coletado do lixo. Use em vez de new e delete . |
ref new, gcnew |
ref new | Sim | Aloca um tipo do Windows Runtime. Use em vez de new e delete . |
ref new, gcnew |
initonly | Sim | Indica que um membro só pode ser inicializado na declaração ou em um construtor estático. | initonly (C++/CLI) |
literal | Sim | Cria uma variável literal. | literal |
nullptr |
Não | Indica que um identificador ou ponteiro não aponta para um objeto. | nullptr |
Construções de modelo
As seguintes construções de linguagem são implementadas como modelos, em vez de como palavras-chave. Se você especificar a opção de compilador /ZW
, eles serão definidos no namespace lang
. Se você especificar a opção de compilador /clr
, eles serão definidos no namespace cli
.
Palavra-chave | Finalidade | Referência |
---|---|---|
array | Declara uma matriz. | matrizes |
interior_ptr | (Somente CLR) Aponta para dados em um tipo de referência. | interior_ptr (C++/CLI) |
pin_ptr | (Apenas CLR) Aponta para os tipos de referência do CLR para suprimir temporariamente o sistema de coleta de lixo. | pin_ptr (C++/CLI) |
safe_cast | Determina e executa o método de conversão ideal para um tipo de runtime. | safe_cast |
typeid |
(Somente CLR) Recupera um objeto System.Type que descreve o tipo ou objeto fornecido. | typeid |
Declaradores
Os seguintes declaradores de tipo instruem o runtime a gerenciar automaticamente o tempo de vida e a exclusão de objetos alocados.
Operador | Finalidade | Referência |
---|---|---|
^ |
Declara um identificador para um objeto; ou seja, um ponteiro para um objeto do Windows Runtime ou do CLR que é automaticamente excluído quando não puder mais ser usado. | Operador Handle to Object (^) |
% |
Declara uma referência de companhamento; ou seja, uma referência a um objeto do Windows Runtime ou do CLR que é automaticamente excluído quando não puder mais ser usado. | Operador de Referência de Acompanhamento |
Construções adicionais e tópicos relacionados
Esta seção lista construções de programação adicionais e tópicos que pertencem ao CLR.
Tópico | Descrição |
---|---|
__identifier (C++/CLI) | (Windows Runtime e CLR) Permite o uso de palavras-chave como identificadores. |
Listas de argumentos variáveis (...) (C++/CLI) | (Windows Runtime e CLR) Permite que uma função obtenha um número variável de argumentos. |
Equivalentes do .NET Framework aos tipos nativos do C++ (C++/CLI) | Lista os tipos de CLR que são usados no lugar dos tipos integrais de C++. |
modificador appdomain __declspec |
Modificador __declspec que exige que variáveis estáticas e globais existam para cada domínio de aplicativo. |
Conversões C-Style com /clr (C++/CLI) | Descreve como as conversões C-Style são interpretadas. |
Convenção de chamada __clrcall | Indica a convenção de chamada em conformidade com CLR. |
__cplusplus_cli |
Macros predefinidas |
Atributos personalizados | Descreve como definir seus próprios atributos CLR. |
Tratamento de exceção | Fornece uma visão geral do tratamento de exceção. |
Substituições explícitas | Demonstra como as funções de membro podem substituir membros arbitrários. |
Assemblies amigáveis (C++) | Discute como um assembly de cliente pode acessar todos os tipos em um componente de assembly. |
Conversão boxing | Demonstra as condições nas quais os tipos de valores são convertidos. |
Suporte para Compilador de Traços de Tipo | Discute como detectar características de tipos em tempo de compilação. |
Pragmas managed, unmanaged | Demonstra como funções gerenciadas e não gerenciadas podem coexistir no mesmo módulo. |
modificador process __declspec |
Modificador __declspec que exige que variáveis estáticas e globais existam por processo. |
Reflexão (C++/CLI) | Demonstra a versão para CLR das informações de tipo em tempo de execução. |
Cadeia de caracteres | Discute a conversão do compilador de literais de cadeia de caracteres para String. |
Encaminhamento de tipos (C++/CLI) | Permite o movimento de um tipo em um assembly de remessa para outro assembly para que o código do cliente não precise ser recompilado. |
Atributos definidos pelo usuário | Demonstra atributos definidos pelo usuário. |
Diretiva #using | Importa assemblies externos. |
Documentação XML | Explica a documentação de código baseada em XML usando /doc (Processar comentários da documentação) (C/C++) |
Confira também
Programação do .NET com C++/CLI (Visual C++)
Interoperabilidade entre .NET e nativo