__value
备注
本主题仅适用于托管扩展的 1 版 C++ 的。只应在此语法维护 1 版代码。有关使用等效功能的信息在新语法,请参见 类和结构 (托管) 。
声明类是 __value 类型。
__value class-specifier
__value struct-specifier
__nogc array-specifier
__nogc pointer-specifier
备注
__value 类型与 __gc 不同输入 __value 类型变量直接包含它们的数据,,而托管变量指向它们的数据,在公共语言运行时堆中存储。
以下条件应用于 __value 类型:
__value 关键字不能应用于接口。
__value 类型从任意数量的接口继承,而且不能从任何其他类型或 __value 类型继承。
__value 类型按照定义是密封的。 有关更多信息,请参见 __sealed。
其有效使用 __value 类型的任意位置托管类型允许的。
备注
__value 关键字不允许的,当使用 __abstract 关键字。
__value 类型可以显式连接到 系统:: 对象 指针。 这称为 " 装箱。
下列指南适用于嵌入 __nogc 类型内的值类型:
值类型必须具有 LayoutSequential 或 LayoutExplicit。
值类型不能有 gc 指针成员。
值类型不能具有私有数据成员。
在 C++ 托管扩展中,对于 C# 类的等效和 C# struct 如下所示:
C++ 托管扩展 |
C# |
更多信息 |
---|---|---|
__gc 结构 - 或 - __gc 类 |
class |
类 关键字 |
__value 结构 - 或 - __value 类 |
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
}