类和结构(托管)

语法

 
 
  
          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 和 privateprivate 是默认值)。 嵌套类或结构不能具有 class_access 说明符。

name
类或结构的名称。

modifier(可选)
abstract 和 sealed 是有效修饰符。

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

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

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

备注

使用 ref class 或 value class 声明的对象的默认成员可访问性是 private。 而使用 ref struct或 value struct 声明的对象的默认成员可访问性是 public

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

若要在编译时检测类型是 ref class 还是 ref struct,或是 value class 还是 value struct,请使用 __is_ref_class (``type``)__is_value_class (``type``) 或 __is_simple_value_class (``type``)

备注

请参阅 Ref 类和结构和 Value 类和结构

参数

base_type(可选)
基类型。 ref class 或 ref struct 可以继承自零个或多个接口以及零种或一种 ref 类型。 value class 或 value struct 只能继承自零个或多个接口。

使用 ref class 或 ref struct 关键字声明对象时,对象通过对象句柄进行访问;即,指向对象的引用计数器指针。 声明的变量超出范围时,编译器会自动删除基础对象。 当对象在调用中用作参数或存储在变量中时,实际是在传递或存储该对象的句柄。

使用 value class 或 value struct 关键字声明对象时,不会监督声明的对象的对象生存期。 该对象如同任何其他标准 C++ 类或结构一样。

备注

下表列出与所有运行时部分中显示的语法之间的特定于 C++/CLI 的差异。

参数

base_type(可选)
基类型。 ref class 或 ref struct 可以继承自零个或多个托管接口以及零种或一种 ref 类型。value class 或 value struct 只能继承自零个或多个托管接口。

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

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

原文地址:https://www.cnblogs.com/ouyangping/p/7940069.html