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

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