__value
备注
本主题仅适用于 C++ 托管扩展的版本 1。此语法应仅用于维护版本 1 代码。有关在新语法中使用等效功能的信息,请参阅类和结构 (托管)。
将类声明为 __value 类型。
__value class-specifier
__value struct-specifier
__nogc array-specifier
__nogc pointer-specifier
备注
__value 类型不同于 __gc 类型,该 __value 类型变量直接包含其数据,而托管变量指向其数据,这将存储在公共语言运行时堆中。
以下情况适用于 __value 类型:
__value 关键字无法应用于某个接口。
__value 类型可从任意数量的接口中继承,并且无法从其他类型或 __value 类型中继承。
__value 类型由定义进行密封。 有关详细信息,请参阅 __sealed。
在允许托管类型的任意位置使用 __value 类型是有效的。
备注
在用于 __abstract 关键字时,不允许使用 __value 关键字。
可以将 __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
}