Compartir a través de


__value

 

Publicada: abril de 2016

Nota

Este tema solo es aplicable a la versión 1 de Extensiones administradas para C++. Esta sintaxis solo se debe utilizar para mantener el código de la versión 1. Consulte Clases y structs (Extensiones de componentes de C++) para obtener información sobre el uso de la funcionalidad equivalente en la nueva sintaxis.

Declara que una clase es de tipo __value.

Sintaxis

__value
 class-specifier
__value
 struct-specifier
__nogc
array-specifier
__nogc
pointer-specifier

Comentarios

Un tipo __value difiere de los tipos __gc en que las variables de tipo __value contienen directamente los datos, mientras que las variables administradas apuntan a los datos, que se almacenan en el montón de Common Language Runtime.

Las condiciones siguientes se aplican a los tipos __value:

  • La palabra clave __value no se puede aplicar a una interfaz.

  • Un tipo __value puede heredar de cualquier número de interfaces y no puede heredar de otros tipos o tipos __value.

  • Un tipo __value está sellado por definición. Para obtener más información, vea __sealed.

  • Es válido usar un tipo __value en cualquier lugar donde se permita un tipo administrado.

Nota

La palabra clave __value no se permite cuando se usa con la palabra clave __abstract.

Un tipo __value puede conectarse explícitamente a un puntero System::Object. Esto se conoce como conversión boxing.

Las directrices siguientes se aplican a la inserción de un tipo de valor dentro de un tipo __nogc:

  • El tipo de valor debe tener LayoutSequential o LayoutExplicit.

  • El tipo de valor no puede tener miembros de puntero gc.

  • El tipo de valor no puede tener miembros de datos privados.

En Extensiones administradas de C++, los equivalentes de una clase de C# y un struct de C# son los siguientes:

Extensiones administradas de C++

C#

Para obtener más información

__gc struct

O bien

__gc class

clase

Palabra clave class

__value struct

O bien

__value class

struct

Palabra clave struct

Ejemplo

En el ejemplo siguiente, se declara un tipo __value(V) y, a continuación, se manipulan dos instancias del tipo __value:

// keyword__value.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>

__value struct V { 
   int m_i;
};

int main() {
   V v1, v2;
   v1.m_i = 5;
   v2 = v1;   // copies all fields of v1 to v2
   v2.m_i = 6;   // does not affect v1.m_I
}