ref class 和 ref struct(C++/CLI 和 C++/CX)

ref class 或 ref struct 扩展声明了对象生存期受自动管理的类或结构。 当对象不再可访问或超出范围时,就会释放内存。

所有运行时

语法

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
(可选)程序集外部类或结构的可访问性。 可能的值为 publicprivateprivate 为默认值)。 嵌套类或结构不得包含 class_access 说明符。

name
类或结构的名称。

modifier
(可选)abstractsealed 是有效修饰符。

inherit_access
(可选)base_type 的可访问性。 唯一允许的访问权限是 publicpublic 是默认值)。

base_type
(可选)基类型。 但是,值类型不能充当基类型。

有关详细信息,请参阅“Windows 运行时”和“公共语言运行时”部分中对此参数的特定语言描述。

注解

使用“ref class”或“value class”声明的对象的默认成员访问权限是 private。 而使用“ref struct”或“value struct”声明的对象的默认成员访问权限是 public

如果引用类型继承自其他引用类型,必须显式重写(使用 override)或隐藏(使用 new(vtable 中的新槽))基类中的虚函数。 派生类函数还必须显式标记为 virtual

若要在编译时检测类型是 ref class 或 ref struct,还是 value class 或 value struct,请使用 __is_ref_class (type)__is_value_class (type)__is_simple_value_class (type)。 有关详细信息,请参阅编译器对类型特征的支持

有关类和结构的详细信息,请参阅

Windows 运行时

备注

请参阅 ref class 和 ref struct 以及 value class 和 value struct

参数

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 可以继承自零个或多个托管接口,也可以继承自零个或一个 ref 类型。 value class 或 value struct 只能继承自零个或多个托管接口。

ref class 或 ref struct 关键字指示编译器,要在堆上分配类或结构。 当对象在调用中用作参数或存储在变量中时,实际是在传递或存储该对象的引用。

value class 或 value struct 关键字指示编译器,已分配类或结构的值传递给函数或存储在成员中。

要求

编译器选项:/clr

另请参阅

.NET 和 UWP 的组件扩展