适用于运行时平台的组件扩展

Visual C++ 提供语言扩展帮助你在运行时平台编程。 通过使用Visual C++ 组件扩展 (C++/CX),可以编写在本机代码编译的Windows 应用商店 应用程序和组件。 可以通过倚靠Windows 运行时 COM 接口可以直接编写程序创建 Windows 应用商店应用程序,但是通过C++/CX可以用构造函数、异常和其他现代 C++ 编程习语工作。 若要使 C++ 在.NET 平台的托管执行环境编程,可以使用C++/CLI。

两个运行时,一组扩展名

C++/CX 是 C++/CLI 的子集。 扩展名是 C++/CX 和 C++/CLI共有的,语义取决于是否面向公共语言运行时(CLR)或 Windows 运行时。 若要在 Windows 运行时编译您的应用程序,请指定 /ZW 编译器选项。 编译它在 CLR 执行,请指定 /clr 编译器选项。 当使用 Visual Studio 创建项目时,这些开关会自动设置。

有关如何在 C++ 中创建Windows 应用商店应用程序的更多信息,请参见 Roadmap for Windows Store apps using C++

C++/CLI 扩展 ISO/ANSI C++ 标准,定义基于Ecma C++/CLI 标准。 有关详细信息,请参阅Visual C++ 中的 .NET 编程

数据类型关键字

语言扩展包括 合计关键字,关键字包括由空格分隔的两个标记。 标记一方面可能意味着要单独使用,另一方面意味着要一起使用它们。 例如,单词“ref”是普通标识符,单词“类”是声明本机类的关键字。 但是,当这些字组合形成 ref class时,得到的复合关键字声明一个公认为运行时类的实体。

扩展还包括区分上下文的关键字。 关键字被视为区分上下文是基于包含它的此类语句及其该语句的位置。 例如,该标记“属性”既可以是标识符,也可以声明特定公共类成员。

下表列出了 C++ 语言扩展的关键字。

关键字

区分上下文

用途

引用

ref class

ref struct

声明类。

类和结构(C++ 组件扩展)

value class

value struct

声明值类的值。

类和结构(C++ 组件扩展)

interface class

interface struct

声明接口。

接口类(C++ 组件扩展)

enum class

enum struct

声明枚举。

enum 类(C++ 组件扩展)

property

声明属性。

属性(C++ 组件扩展)

delegate

声明委托。

委托(C++ 组件扩展)

event

声明事件。

event(C++ 组件扩展)

重写说明符

可以使用下列关键字为派生限定替代行为。 虽然new 关键字不是 C++ 扩展,但此处列出,因为它可用于附加的上下文中。 某些说明符用于本机编程也是有效的。 有关详细信息,请参阅如何:声明在本机生成的重写说明符

关键字

区分上下文

用途

引用

abstract

指示函数或类是抽象的。

abstract(C++ 组件扩展)

new

指示函数不是基类版本的重写。

new(vtable 中的新槽)(C++ 组件扩展)

override

指示方法必须是一个基类版本的重写。

重写(C++ 组件扩展)

sealed

防止类用作基类。

已密封(C++ 组件扩展)

泛型关键字

添加下面的关键字以支持泛型类型 。 有关详细信息,请参阅泛型(C++ 组件扩展)

关键字

区分上下文

用途

generic

声明一个泛型类型。

where

指定应用于泛型类型参数的约束。

混合关键字

以下关键字被添加到 C++ 扩展。

关键字

区分上下文

用途

引用

finally

指示默认值异常处理行为。

异常处理(C++ 组件扩展)

for each, in

枚举集合元素。

对于每个,

gcnew

在垃圾回收堆中分配类型。 而不是使用newdelete

ref new、gcnew(C++ 组件扩展)

ref new

分配Windows 运行时类型。 而不是使用newdelete

ref new、gcnew(C++ 组件扩展)

initonly

指示成员只能在声明或静态构造函数中被初始化。

initonly

literal

创建一个文本变量。

文本(C++ 组件扩展)

nullptr

指示图柄或指针不指向对象。

nullptr(C++ 组件扩展)

模板构造

下面的语言构造作为模板实现,而不是作为关键字。 如果指定**/ZW** 编译器选项,他们在lang 命名空间中被定义。 如果指定**/clr** 编译器选项,他们在cli 命名空间中被定义。

关键字

用途

引用

array

声明数组。

数组(C++ 组件扩展)

interior_ptr

在引用类型中(仅 CLR) 指向数据。

interior_ptr (C++/CLI)

pin_ptr

(仅 CLR) 指向 CLR 引用类型暂时禁止垃圾回收系统。

pin_ptr (C++/CLI)

safe_cast

确定并执行一个运行时类型的最佳强制转换方法。

safe_cast(C++ 组件扩展)

typeid

(仅 CLR)恢复Type 对象,该对象描述给定类型或对象。

typeid(C++ 组件扩展)

声明符

以下类型声明指示运行时自动管理分配对象的生存期和删除。

运算符

用途

引用

^

为对象声明句柄;即Windows 运行时 或 CLR 对象指针不再可用时会自动删除。

对象句柄运算符 (^)(C++ 组件扩展)

%

声明跟踪引用;即Windows 运行时 或 CLR 引用不再可用时会自动删除。

跟踪引用运算符(C++ 组件扩展)

其他构造和相关主题

本节列出了不同的编程构造以及关于 CLR 的主题。

主题

描述

__identifier (C++/CLI)

(Windows 运行时 和 CLR)使用关键字作为标识符。

变量参数列表 (...) (C++/CLI)

(Windows 运行时 and CLR) 使函数采用可变的参数数目。

对应于 C++ 本机类型的 .NET Framework 类型 (C++/CLI)

列出在 C++ 整型类型位置使用的 CLR 类型。

appdomain __declspec修饰符

__declspec 修饰符规定静态和全局变量存在于每个应用程序域。

C 风格的强制转换和 /clr (C++/CLI)

描述如何解释 C 样式转换。

__clrcall调用约定

指示符合 CLS的调用约定。

__cplusplus_cli

预定义的宏

自定义特性 (C++)

描述如何定义自己的 CLR 特性。

异常处理(C++ 组件扩展)

提供异常处理的概述。

显式重写(C++ 组件扩展)

演示成员函数如何重写任意成员。

友元程序集 (C++)

讨论在程序集组件中客户端程序集如何访问所有类型。

装箱(C++ 组件扩展)

演示值类型进行装箱的条件。

编译器支持类型特征(C++ 组件扩展)

讨论在编译时如何检测类型的属性。

managed、unmanaged 说明

演示托管和非托管功能如何在同一个模块共存。

进程 __declspec修饰符

__declspec 修饰符规定静态和全局变量存在于每个进程。

反射 (C++/CLI)

演示运行时类型信息的 CLR 版本。

String(C++ 组件扩展)

讨论字符转换为String的编译器版本。

类型转发 (C++/CLI)

启用一个类型的移动从一个提供程序集到另一个程序集,以便客户端代码不必重新编译。

用户定义的特性(C++ 组件扩展)

演示用户定义的特性。

#using 指令 (C++)

导入外部程序集。

XML 文档 (Visual C++)

使用/doc(处理文档注释)(C/C++) 解释基于 XML 代码文件。

请参见

其他资源

Visual C++ 中的 .NET 编程

本机和 .NET 的互操作性