类和结构(C++ 组件扩展)
声明对象生存期会自动管理的类或结构。 当对象不可访问或超出范围时,Visual C++ 会自动放弃分配给该对象的内存。
所有运行时
语法
class_access ref class name modifier : inherit_access base_type {};
class_access ref struct name modifier : inherit_access base_type {};
class_access value class name modifier : inherit_access base_type {};
class_access value struct name modifier : inherit_access base_type {};
参数
class_access(可选)
程序集外的类或结构的可访问性。 可能的值为 public 和 private (private 是默认的)。 嵌套类或结构不能有 class_accessclass_access 说明符。name
类或结构的名称。inherit_access(可选)
base_type 可访问性。 唯一允许的可访问性为 public(public 为默认值)。base_type(可选)
一种基类型。 但是,值类型不能用作基类型。有关更多信息,请参见 Windows 运行时 和 公共语言运行时 小节中参数的特定语言说明。
备注
以 ref 类或值类声明的对象默认成员可访问性为 private。 以 ref 结构或 value 结构声明的对象默认成员辅助功能为 public。
从其他引用类型继承引用类型时,必须显示覆盖(使用 重写(C++ 组件扩展))或隐藏(使用 new(vtable 中的新槽)(C++ 组件扩展))基类中的虚函数。 派生类函数还必须显式标记为 virtual。
要在编译时检测该类型是否为 ref class、ref struct、value class 或 value struct,请使用 __is_ref_class (type)、__is_value_class (type) 或 __is_simple_value_class (type)。 有关详细信息,请参阅编译器支持类型特征(C++ 组件扩展)。
有关类和结构的更多信息,请参见
Windows 运行时
备注
参数
base_type(可选)
一种基类型。 ref class 或 ref struct 可以从零或多个接口以及零或一个 ref 类型继承。 value class 或 value struct 只能从零或更多接口继承。当通过使用 ref class 或 ref struct 关键字声明对象时,应通过对象句柄(即,对象的引用计数器)访问对象。 当声明的变量超出范围时,编译器会自动删除基础对象。 当对象用户调用参数或存储在变量中时,实际将传递或存储该对象的句柄。
当通过使用 value class 或 value struct 关键字声明对象时,无法监管所声明对象的对象生存期。 对象与其他标准 C++ 类或结构类似。
要求
编译器选项:/ZW
公共语言运行时
备注
下表列出了在特定于 C++/CLI 的所有运行时章节显示的语法差异。
参数
base_type(可选)
一种基类型。 ref class 或 ref struct 可以从零或多个托管接口以及零或一个引用类型继承。 value class 或 value struct 只能从零个或多个托管接口继承。ref class 和 ref struct 关键字通知编译器类或结构将在堆中分配。 当对象用户调用参数或存储在变量中时,实际将传递或存储该对象的引用。
value class 和 value struct 关键字通知编译器已分配类或结构的值已传递给函数或存储在成员中。
要求
编译器选项:/clr