Compartilhar via


__value

 

Publicado: abril de 2016

Dica

Este tópico se aplica apenas a versão 1 de Managed Extensions for C++. Esta sintaxe só deve ser usada para manter o código da versão 1. Consulte Classes and Structs (C++ Component Extensions) para obter informações sobre como usar a funcionalidade equivalente na nova sintaxe.

Declara uma classe para ser um tipo Value.

Sintaxe

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

Comentários

Um __value difere do tipo __gc tipos em que __value variáveis de tipo contém diretamente seus dados, enquanto variáveis gerenciadas apontam para seus dados, que são armazenados no heap de common language runtime.

As condições a seguir se aplicam a __value tipos:

  • O __value palavra-chave não pode ser aplicada a uma interface.

  • Um __value tipo pode herdar de qualquer número de interfaces e não pode herdar de outros tipos ou __value tipos.

  • Um __value tipo é sealed por definição. Para obter mais informações, consulte sealed.

  • É válido usar um __value digitar em qualquer lugar que um tipo gerenciado é permitido.

Dica

O __value palavra-chave não é permitida quando usada com a __abstract palavra-chave.

Um __value tipo pode ser explicitamente conectado a um System:: Object ponteiro. Isso é conhecido como conversão boxing.

As diretrizes a seguir se aplicam à inserção de um tipo de valor dentro de uma __nogc tipo:

  • O tipo de valor deve ter LayoutSequential ou LayoutExplicit.

  • O tipo de valor não pode ter membros do ponteiro gc.

  • O tipo de valor não pode ter membros de dados particulares.

Nas extensões gerenciadas para C++, os equivalentes a uma classe c# e uma estrutura c# são:

Extensões gerenciadas do C++

C#

Para obter mais informações

struct GC

- ou -

classe GC

classe

classe palavra-chave

struct Value

- ou -

classe Value

struct

struct palavra-chave

Exemplo

No exemplo a seguir, um __value tipo (V) é declarado e, em seguida, duas instâncias do __value tipo são manipulados:

// 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
}