ref class y ref struct (C++/CLI y C++/CX)

Las extensiones ref class o ref struct declaran una clase o struct cuya duración de objetos se administra automáticamente. Cuando el objeto ya no es accesible o queda fuera del ámbito, se libera memoria.

Todos los runtimes

Sintaxis

class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};

Parámetros

class_access
(Opcional) La accesibilidad de la clase o el struct fuera del ensamblado. Los valores posibles son public y private (private es el valor predeterminado). Las clases o los structs anidados no pueden tener un especificador class_access.

name
Nombre de la clase o struct.

modifier
(Opcional) abstract y sealed son modificadores válidos.

inherit_access
(Opcional) La accesibilidad de base_type. La única accesibilidad permitida es public (public es el valor predeterminado).

base_type
(Opcional) Un tipo base. Sin embargo, un tipo de valor no puede actuar como tipo base.

Para más información, consulte las descripciones específicas del lenguaje de este parámetro en las secciones Windows Runtime y Common Language Runtime.

Comentarios

La accesibilidad de miembro predeterminada de un objeto declarado con ref class o value class es private, mientras que la accesibilidad de miembro predeterminada de un objeto declarado con ref struct o value struct es public.

Cuando un tipo de referencia hereda de otro tipo de referencia, las funciones virtuales de la clase base deben reemplazarse explícitamente (con override) u ocultarse (con new [nueva ranura en vtable]). Las funciones de la clase derivada también deben marcarse explícitamente como virtual.

Para detectar en tiempo de compilación si un tipo es ref class o ref struct, o value class o value struct, use __is_ref_class (type), __is_value_class (type) o __is_simple_value_class (type). Para más información, consulte Compatibilidad del compilador con rasgos de tipo.

Para obtener más información sobre clases y structs, vea

Windows en tiempo de ejecución

Comentarios

Consulte Ref (Clases y structs) y Value (Clases y structs).

Parámetros

base_type
(Opcional) Un tipo base. Un tipo ref class o ref struct puede heredar de cero o más interfaces y de cero o ningún tipo ref. Un tipo value class o value struct solo puede heredar de cero o más interfaces.

Al declarar un objeto mediante las palabras clave ref class o ref struct, se accede al objeto mediante un manipulador a un objeto; es decir, un puntero de contador de referencia al objeto. Cuando la variable declarada se sale del ámbito, el compilador elimina automáticamente el objeto subyacente. Cuando el objeto se usa como parámetro en una llamada o se almacena en una variable, se pasa o se almacena realmente un identificador del objeto.

Cuando se declara un objeto mediante las palabras clave value class o value struct, no se supervisa la duración del objeto declarado. El objeto es como cualquier otra clase o struct estándar de C++.

Requisitos

Opción del compilador: /ZW

Common Language Runtime

Comentarios

En la tabla siguiente se enumeran las diferencias con la sintaxis mostrada en la sección Todos los runtimes que es específica de C++/CLI.

Parámetros

base_type
(Opcional) Un tipo base. Un tipo ref class o ref struct puede heredar de cero o más interfaces administradas y de cero o un tipo de referencia. Un tipo value class o value struct solo se puede heredar de cero o más interfaces administradas.

Las palabras clave ref class y ref struct indican al compilador que la clase o estructura se va a asignar en el montón. Cuando el objeto se usa como parámetro en una llamada o se almacena en una variable, se pasa o se almacena realmente una referencia al objeto.

Las palabras clave value class y value struct indican al compilador que el valor de la clase o de la estructura asignada se pasa a funciones o se almacena en miembros.

Requisitos

Opción del compilador: /clr

Consulte también

Extensiones de componentes de .NET y UWP