Partager via


__value

 

Publication: mars 2016

Notes

Cette rubrique s’applique uniquement à la version 1 des extensions managées pour C++. Cette syntaxe doit être utilisée uniquement pour conserver le code de la version 1. Consultez Classes and Structs (C++ Component Extensions) Pour plus d’informations sur l’utilisation de la fonctionnalité équivalente dans la nouvelle syntaxe.

Déclare une classe pour qu'elle soit de type __value.

Syntaxe

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

Notes

Le type __value diffère des types __gc dans le sens où les variables de type __value contiennent directement leurs données, alors que les variables gérées pointent vers leurs données, qui sont stockées sur le tas Common Langage Runtime.

Les conditions suivantes s'appliquent aux types __value :

  • Le mot clé __value ne peut pas être appliqué à une interface.

  • Un type __value peut hériter d'un nombre illimité d'interfaces mais ne peut pas hériter d'autres types ou de types __value.

  • Un type __value est sealed par définition. Pour plus d'informations, consultez __sealed.

  • Il est possible d'utiliser un type __value partout où un type managé est autorisé.

Notes

Vous ne pouvez pas utiliser le mot clé __value avec le mot clé __abstract.

Un type __value peut être explicitement connecté à un pointeur System::Object. Il s'agit du boxing.

Les indications suivantes s'appliquent à l'incorporation d'un type valeur à l'intérieur d'un type __nogc :

  • Le type valeur doit être LayoutSequential ou LayoutExplicit.

  • Il ne peut pas comporter de membres de pointeurs gc.

  • Le type valeur ne peut pas contenir des données membres privées.

Dans les Extensions managées pour C++, les équivalents pour C# class et C# struct sont les suivants :

Extensions managées pour C++

C#

Pour plus d'informations

__gc struct

ou

__gc class

classe

mot clé class

__value struct

ou

__value class

struct

mot clé struct

Exemple

Dans l'exemple suivant, un type __value (V) est déclaré puis deux instances du type __value sont manipulées :

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