__value
Примечание
Этот раздел применим только к версии 1 управляемых расширений для C++.Этот синтаксис должен использоваться только для поддержания Кода версии 1.См. классы и структуры (управляемые) дополнительные сведения об использовании эквивалентным функциям в новом синтаксисе.
Объявляет класс, чтобы быть типом __value.
__value class-specifier
__value struct-specifier
__nogc array-specifier
__nogc pointer-specifier
Заметки
A __value тип отличается от __gc типы в __value переменные типа их непосредственно содержат данные, в то время как управляемый пункт переменные в них данные, которые хранятся в куче среды CLR.
Следующие условия применяются к __value типы:
__value ключевое слово нельзя применять к интерфейсу.
A __value тип может наследовать из любого числа интерфейсов и не может наследовать от других типов или __value типы.
A __value тип запечатан определением. Дополнительные сведения см. в разделе __sealed.
Он допустим для использования a __value тип везде, где допускается управляемый тип.
Примечание
__value нельзя использовать ключевое слово при использовании с __abstract ключевое слово.
A __value тип можно явно подключиться к a System:: Object указатель. Это называется упаковка-преобразование.
Следующие правила применяются для внедрения тип значения in a __nogc тип:
Тип значения должен иметь LayoutSequential OR LayoutExplicit.
Тип значения не может иметь членов указателя gc.
Тип значения не может быть членами личных данных, таких.
В управляемых расширениях для C++, c# и структуре числа в класс c#:
Управляемые расширения для C++ |
C# |
Дополнительные сведения |
---|---|---|
Структура __gc -или- Класс __gc |
class |
класс ключевое слово |
Структура __value -или- Класс __value |
struct |
структура ключевое слово |
Пример
В следующем примере a __value типVобъявляет 2), а затем экземпляра __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
}