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