Extensiones de componentes de .NET y UWP

El estándar C++ permite a los proveedores de compiladores proporcionar extensiones no estándar al lenguaje. Microsoft proporciona extensiones para ayudar a conectar código C++ nativo a código que se ejecuta en .NET Framework o la Plataforma universal de Windows (UWP). A las extensiones .NET se les llama C++/CLI y producen código que se ejecuta en el entorno de ejecución administrado de .NET denominado Common Language Runtime (CLR). A las extensiones UWP se les llama C++/CX y producen código máquina nativo.

Nota:

Para nuevas aplicaciones, recomendamos usar C++/WinRT en lugar de C++/CX. C++/WinRT es una proyección de lenguaje C++17 nueva y estándar para las API de Windows Runtime. Seguiremos admitiendo C++/CX y WRL, pero recomendamos encarecidamente que las nuevas aplicaciones usen C++/WinRT. Para obtener más información, consulte C++/WinRT.

Dos runtime, un conjunto de extensiones

C++/CLI extiende el estándar C++ de ANSI/ISO y se define en la norma ECMA de C++/CLI. Par obtener más información, consulte el artículo sobre la programación de .NET con C++/CLI (Visual C++).

Las extensiones para C++/CX son un subconjunto de C++/CLI. Aunque la sintaxis de extensiones es idéntica en la mayoría de los casos, el código que se genera depende de si especifica la opción del compilador /ZW para establecer UWP como destino o la opción /clr para establecer .NET como destino. Estos modificadores se establecen automáticamente cuando se usa Visual Studio para crear un proyecto.

Palabras clave de tipo de datos

Las extensiones de lenguaje incluyen palabras clave agregadas, que constan de dos tokens separados por espacios en blanco. Los tokens pueden tener un significado cuando se usan por separado, y otro significado cuando se usan juntos. Por ejemplo, la palabra “ref” es un identificador normal, y la palabra “clase” es una palabra clave que declara una clase nativa. Pero cuando estas palabras se combinan para formar ref class, la palabra clave agregada resultante declara una entidad denominada clase en tiempo de ejecución.

Las extensiones también incluyen palabras clave contextuales. Una palabra clave se trata como contextual en función del tipo de instrucción que la contenga, y de su posición en esa instrucción. Por ejemplo, el token “property” puede ser un identificador, o puede declarar una clase especial de miembro de clase pública.

En la tabla siguiente se enumeran las palabras clave en la extensión del lenguaje C++.

Palabra clave Contextual Propósito Referencia
ref class

ref struct
No Declara una clase. Clases y structs
value class

value struct
No Declara una clase de valor. Clases y structs
clase de interfaz

interface struct
No Declara una interfaz. clase de interfaz
enum class

enum struct
No Declara una enumeración. enum class
property Declara una propiedad. property
delegate Declara un delegado. delegate (C++/CLI y C++/CX)
event Declara un evento. event

Especificadores de invalidación

Puede usar las palabras clave siguientes para calificar el comportamiento de invalidación de la derivación. Aunque la palabra clave new no es una extensión de C++, se muestra aquí porque se puede usar en un contexto adicional. Algunos especificadores también son válidos para la programación nativa. Para obtener más información, vea Procedimientos para declarar especificadores de reemplazo en compilaciones nativas (C++/CLI).

Palabra clave Contextual Propósito Referencia
abstract Indica que las funciones o las clases son abstractas. abstract
new No Indica que una función no es una invalidación de una versión de la clase base. new (nueva ranura en vtable)
override Indica que un método debe ser una invalidación de una versión de la clase base. override
sealed Evita que las clases se usen como clases base. sealed

Palabras clave para genéricos

Las palabras clave siguientes se han agregado para admitir tipos genéricos. Para más información, vea Genéricos.

Palabra clave Contextual Propósito
generic No Declara un tipo genérico.
where Especifica las restricciones que se aplican a un parámetro de tipo genérico.

Palabras clave varias

Las palabras clave siguientes se han agregado a las extensiones de C++.

Palabra clave Contextual Propósito Referencia
finally Indica el comportamiento predeterminado de los controles de excepciones. Control de excepciones
for each, in No Enumera los elementos de una colección. for each, in
gcnew No Asigna tipos en el montón de recolección de elementos no utilizados. Úselo en lugar de new y delete. ref new, gcnew
ref new Asigna un tipo de Windows Runtime. Úselo en lugar de new y delete. ref new, gcnew
initonly Indica que un miembro solo se puede inicializar en la declaración o en un constructor estático. initonly (C++/CLI)
literal Crea una variable literal. literal
nullptr No Indica que un identificador o un puntero no señalan un objeto. nullptr

Construcciones de plantilla

Las construcciones de lenguaje siguientes se implementan como plantillas, en lugar de como palabras clave. Si especifica la opción del compilador /ZW, se definen en el espacio de nombres lang. Si especifica la opción del compilador /clr, se definen en el espacio de nombres cli.

Palabra clave Propósito Referencia
array Declara una matriz. Matrices
interior_ptr (solo CLR) Apunta a los datos de un tipo de referencia. interior_ptr (C++/CLI)
pin_ptr (solo CLR) Apunta a los tipos de referencia CLR para suprimir temporalmente el sistema de recolección de elementos no utilizados. pin_ptr (C++/CLI)
safe_cast Determina y ejecuta el método óptimo de conversión para un tipo de runtime. safe_cast
typeid (solo CLR) Recupera un objeto System.Type que describe el tipo o el objeto especificado. typeid

Declaradores

Los declaradores de tipo siguientes indican al runtime que debe administrar automáticamente la duración y eliminación de los objetos asignados.

Operador Propósito Referencia
^ Declara un identificador a un objeto; es decir, un puntero a un objeto Windows Runtime o CLR que se elimina automáticamente cuando ya no se usa. Identificador a un operador de objeto (^)
% Declara una referencia de seguimiento; es decir, una referencia a un objeto Windows Runtime o CLR que se elimina automáticamente cuando ya no se usa. Operador de referencia de seguimiento

En esta sección se muestran construcciones de programación adicionales y temas que pertenecen a CLR.

Tema Descripción
__identifier (C++/CLI) (Windows Runtime y CLR) Habilita el uso de palabras clave como identificadores.
Listas de argumentos de variables (...) (C++/CLI) (Windows Runtime y CLR) Permite que una función tome un número variable de argumentos.
Equivalentes de .NET Framework para tipos nativos de C++ (C++/CLI) Enumera los tipos CLR que se usan en lugar de los tipos enteros de C++.
Modificador __declspec de appdomain El modificador __declspec que requiere la existencia de variables static y globales por appdomain.
Conversiones de estilo C con /clr (C++/CLI) Describe cómo se interpretan las conversiones de tipo C.
Convención de llamada __clrcall Indica la convención de llamada conforme a CLR.
__cplusplus_cli Macros predefinidas
Atributos personalizados Describe cómo definir sus propios atributos de CLR.
Control de excepciones Proporciona información general sobre el control de excepciones.
Invalidaciones explícitas Muestra cómo las funciones miembro pueden invalidar miembros arbitrarios.
Ensamblados de confianza (C++) Explica cómo un ensamblado de cliente puede tener acceso a todos los tipos de un componente de ensamblado.
Conversión boxing Muestra las condiciones en las que a los tipos de valores se les aplica la conversión boxing.
Compatibilidad de compilador para type traits Explica cómo detectar características de tipos en tiempo de compilación.
Pragmas managed, unmanaged Muestra cómo las funciones administradas y no administradas pueden coexistir en el mismo módulo.
Modificador __declspec de process El modificador __declspec que requiere la existencia de variables static y globales por proceso.
Reflexión (C++-CLI) Muestra la versión de CLR de la información de tipo en tiempo de ejecución.
String Describe la conversión del compilador de literales de cadena a String.
Reenvío de tipos (C++/CLI) Habilita el movimiento de un tipo en un ensamblado de envío a otro ensamblado de modo que no es necesario volver a compilar el código de cliente.
Atributos definidos por el usuario Muestra atributos definidos por el usuario.
#using (directiva) Importa ensamblados externos.
Documentación de XML Explica la documentación de código basada en XML mediante el uso de /doc (procesar comentarios de documentación) (C/C++)

Consulte también

Programación de .NET con C++/CLI (Visual C++)
Interoperabilidad nativa y de .NET