Condividi tramite


__value

Nota

Questo argomento si applica solo alla versione 1 delle estensioni gestite per C++.Questa sintassi deve essere utilizzata solo per gestire il codice della versione 1.Per informazioni sull'utilizzo della funzionalità equivalente nella nuova sintassi, vedere Classi e struct (Estensioni del componente C++).

Dichiara una classe come un tipo __value.

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

Note

Un tipo __value differisce dai tipi __gc in quanto le variabili di tipo __value contengono direttamente i dati, mentre le variabili gestite puntano ai dati, archiviati nell'heap di Common Language Runtime.

Le seguenti condizioni si applicano ai tipi __value:

  • La parola chiave __value non può essere applicata a un'interfaccia.

  • Un tipo __value può ereditare da un numero qualsiasi di interfacce e non da altri tipi o dai tipi __value.

  • Un tipo __value è sealed per definizione. Per ulteriori informazioni, vedere __sealed.

  • È valido utilizzare un tipo __value ogni volta che un tipo gestito è consentito.

Nota

La parola chiave __value non è consentita se utilizzata con la parola chiave __abstract.

Un tipo __value può essere connesso in modo esplicito a un puntatore System::Object. Questo concetto è noto come boxing.

Le linee guida seguenti si applicano per incorporare un tipo di valore in un tipo __nogc:

  • Il tipo di valore deve disporre di LayoutSequential o LayoutExplicit.

  • Il tipo di valore non può avere membri puntatore _gc.

  • Il tipo di valore non può disporre di membri dati privati.

Nelle estensioni gestite di C++ gli equivalenti di una classe e di uno struct C# sono i seguenti:

Estensioni gestite per C++

C#

Per ulteriori informazioni

__gc struct

-oppure-

__gc class

classe

Parola chiave class

__value struct

-oppure-

__value class

struct

parola chiave struct

Esempio

Nell'esempio seguente un tipo __value (V) viene dichiarato e quindi vengono manipolate due istanze 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
}