__value

Примечание

Этот раздел относится только к управляемым расширениям для C++ версии 1.Приведенный здесь синтаксис должен использоваться только для обслуживания кода версия 1.Сведения об использовании аналогичных функциональных возможностей в новом синтаксисе см. в разделе классы и структуры (управляемые).

Объявляет класс как класс типа __value.

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

Заметки

Тип __value отличается от типов __gc в том, что переменные типа __value непосредственно содержат собственные данные, в то время как управляемые переменные указывают на свои данные, которые хранятся в куче среды CLR.

К типам __value применяются следующие условия.

  • Ключевое слово __value не может применяться к интерфейсу.

  • Тип __value может наследоваться от любого числа интерфейсов и не может наследоваться от других типов или типов __value.

  • Тип __value является запечатанным по определению. Дополнительные сведения см. в разделе __sealed.

  • Тип __value можно использовать везде, где разрешен управляемый тип.

Примечание

Не разрешается использовать ключевое слово __value с ключевым словом __abstract.

Тип __value можно явно подключить к указателю System::Object. Это называется упаковкой-преобразованием.

При внедрении типа значения внутри типа __nogc применяются следующие правила.

  • Тип значения должен быть LayoutSequential или LayoutExplicit.

  • Тип значения не может иметь члены указателя gc.

  • Тип значения не может иметь закрытые данные-члены.

В управляемых расширениях для C++ используются следующие эквиваленты класса C# и структуры C#.

Управляемые расширения для C++

C#

Дополнительные сведения

Структура __gc

-или-

Класс __gc

класс

ключевое слово class

Структура __value

-или-

Класс __value

struct

ключевое слово struct

Пример

В следующем примере объявляется тип __value (V), а затем выполняются действия с двумя экземплярами типа __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
}