__value
Veröffentlicht: Juli 2016
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. Finden Sie unter Classes and Structs (C++ Component Extensions) Informationen zur Verwendung der entsprechenden Funktionalität in der neuen Syntax.
Deklariert eine Klasse als __value-Typ.
Syntax
__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 |
Klasse |
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
}