Freigeben über


__value

Hinweis

Dieses Thema gilt nur für Version 1 von Managed Extensions für C++.Diese Syntax sollte nur verwendet werden, um Code von Version 1 beizubehalten.Informationen über die Verwendung der entsprechenden Funktionen in der neuen Syntax finden Sie unter Klassen und Strukturen (Komponentenerweiterungen für C++).

Deklariert eine Klasse als __value-Typ.

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

Hinweise

Ein __value-Typ unterscheidet sich von __gc-Typen insoweit, als dass die __value-Typvariablen ihre Daten direkt enthalten, während verwaltete Variablen auf ihre Daten verweisen, die im Common Language Runtime-Heap gespeichert sind.

Für __value-Typen gelten die folgenden Bedingungen:

  • Das __value-Schlüsselwort kann nicht auf eine Schnittstelle angewendet werden.

  • Ein __value-Typ kann von einer beliebigen Anzahl von Schnittstellen erben, aber nicht von anderen Typen oder von __value-Typen.

  • Ein __value-Typ ist gemäß Definition versiegelt. Weitere Informationen finden Sie unter __sealed.

  • Es ist zulässig, einen __value-Typ überall dort zu verwenden, wo ein verwalteter Typ verwendet werden kann.

Hinweis

Das __value-Schlüsselwort ist nicht zulässig, wenn es mit dem __abstract-Schlüsselwort verwendet wird.

Ein __value-Typ kann explizit mit einem System::Object-Zeiger verknüpft sein. Dies wird als Boxing bezeichnet.

Die folgenden Richtlinien gelten für das Einbetten eines Werttyps innerhalb eines __nogc-Typs:

  • Der Werttyp muss LayoutSequential oder LayoutExplicit aufweisen.

  • Der Werttyp darf keine gc-Zeigermember aufweisen.

  • Der Werttyp darf keine privaten Datenmember aufweisen.

In verwalteten Erweiterungen für C++ sind die Entsprechungen zu einer C#-Klasse und einer C#-Struktur wie folgt:

Verwaltete Erweiterungen für C++

C#

Weitere Informationen

__gc struct

-oder-

__gc class

class

class-Schlüsselwort

__value struct

-oder-

__value class

struct

struct-Schlüsselwort

Beispiel

Im folgenden Beispiel wird ein __value-Typ (V) deklariert, dann werden zwei Instanzen des __value-Typs bearbeitet:

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