ReSharper 2025.2 Help

C++/CLI 支持

C++/CLI 是 Microsoft 提供的一组 C++ 语言扩展,旨在实现托管代码与本机代码之间的轻松互操作。 它包括泛型、值类和引用类、句柄、跟踪引用、接口以及其他语法扩展。

除了主要的 代码分析导航与搜索编码辅助以及您在 C++ 中习惯使用的其他功能外,ReSharper 还为 C++/CLI 特定的情况提供了额外支持。

搜索与导航

由于 C++/CLI 是语言之间的桥梁,ReSharper 提供了跨语言导航功能以改善互操作性:

转到派生符号 还适用于 C++/CLI 属性中的 get/set 函数以及 C++/CLI 事件中的 add/remove 函数。

在 C++/CLI 中转到派生

代码分析

ReSharper 包含一组针对 C++/CLI 特定语言结构的检查:

  • 如果接口成员缺少 virtual 说明符,或者没有 public 可访问性,您将收到警告。

    方法必须是 public 且 virtual
  • ReSharper 会检查您分配内存的方式,并在目标类型无效时建议快速修复,将 gcnew 替换为 new。 它还适用于将 new 替换为 gcnew

    无法在本机类型上使用 gcnew
  • ReSharper 会在您尝试对托管类或接口使用 C++ final 说明符时发出警告,并提供快速修复以将其更改为 sealed

    将 final 替换为 sealed

此外,还有一些针对 C++/CLI 的有用快速修复。 例如,C++/CLI 中的 safe_cast 运算符在从基类向派生类进行向下转换时特别有用: safe_cast 执行动态检查,并在转换失败时抛出 InvalidCastException。 您可以使用快速修复将 C 风格的强制类型转换转换为 safe_cast

使用 C 风格的强制类型转换代替 C++ 类型转换

嵌入提示

除了 参数名称类型名称提示之外,ReSharper 还为 C++/CLI 装箱转换提供了 类型转换提示 ,这会在托管堆上分配内存。 标准转换的此类提示默认是禁用的,但您可以在 ReSharper 选项 的 环境 | 内嵌提示 | C++ | 类型转换提示 页面上启用它们 Alt+R, O

C++/CLI 装箱转换

格式化样式

额外的格式化设置允许您配置 C++/CLI 泛型约束的样式:选择首选缩进、在需要的地方添加空格,并强制换行(代码编辑 | C++ | 格式化样式)。

generic <class ItemType> where ItemType:IItem ref class Stack {};
generic <class ItemType> where ItemType : IItem ref class Stack {};

后缀补全

某些 C++ 后缀模板 专为在其上下文中生成 C++/CLI 代码而设计。

  • 使用 .gcnew 生成类型的实例化表达式。

  • 使用 .safe_cast 将表达式包围在 .safe_cast 中。

已知问题和限制

最后修改日期: 2025年 9月 27日