Sdílet prostřednictvím


__value

 

Publikováno: duben 2016

Poznámka

Toto téma se týká pouze verze 1 spravovaných rozšíření jazyka C++. Tato syntaxe by měla sloužit pouze k udržování kódu verze 1. Viz Classes and Structs (C++ Component Extensions) informace o použití ekvivalentní funkce v nové syntaxi.

Deklaruje třídu být __value typu.

Syntaxe

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

Poznámky

A __value Typ se liší od __gc typy v tomto __value proměnné typu přímo obsahují příslušná data, zatímco spravované proměnné přejděte na svá data, která je uložena v haldě běžné language runtime.

Platí následující podmínky __value typy:

  • __value Rozhraní nelze použít klíčové slovo.

  • A __value typu může dědit z libovolný počet rozhraní a nemůže dědit z jiných typů nebo __value typy.

  • A __value podle definice je zapečetěná typu. Další informace naleznete v tématu __sealed.

  • Je možné použít __value Zadejte všude, kde je povoleno spravovaného typu.

Poznámka

__value Klíčové slovo není povoleno, pokud se používá s __abstract klíčové slovo.

A __value Typ může být explicitně připojena k System::Object ukazatele. To se označuje jako zabalení.

Následující pokyny se vztahují k vložení typu hodnoty uvnitř __nogc Typ:

  • Typ hodnoty musí mít LayoutSequential nebo LayoutExplicit.

  • Typ hodnoty nemohou obsahovat členy ukazatel gc.

  • Hodnota typu nemůže být soukromé datové členy.

Ve spravovaných rozšíření jazyka C++ jsou ekvivalenty třída jazyka C# a struktura jazyka C#:

spravovaná rozšíření pro C++

C#

Další informace

__gc – struktura

- nebo -

__gc – třída

třída

třídy – klíčové slovo

__value – struktura

- nebo -

__value – třída

struct

Struktura – klíčové slovo

Příklad

V následujícím příkladu __value typu (V) je deklarována a poté dva výskyty __value manipuluje s typu:

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