C++/CLI 和 C# 中的类型“long”有什么区别

本文关键字:long 区别 什么 类型 CLI C++ | 更新日期: 2023-09-27 18:20:28

C++/CLI 项目中,我有方法void DoSomething(long x); .如果我想在任何用 C# 编写的单元测试中使用它,方法参数x显示为类型 int

为什么我必须将签名更改为void DoSomething(long long x);才能在单元测试 (C#( 中将其与 long 类型的参数一起使用?

C++/CLI 和 C# 中的类型“long”有什么区别

long

C#和C++中的关键字。 它们的意思根本不相同。 C++/CLI 设计人员选择了C++解释,因为C++是目标互操作语言。

不完全是唯一不直观的映射:

  • C# 字节 => C++/CLI 无符号字符
  • C# sbyte => C++/CLI 字符
  • C# 字符 => C++/CLI wchar_t
  • C# ushort => C++/CLI 无符号短
  • C# uint => C++/CLI unsigned int
  • C# long => C++/CLI long long
  • C# ulong => C++/CLI 无符号长
  • C# 字符串 => 没有等效项,请使用 System::String^
  • C# 十进制 => 没有等效项,使用 System::D ecimal
  • C# 对象 => 没有等效项,请使用 System::Object^
  • C# 枚举 => C++/CLI 公共枚举类
  • C# 结构 => C++/CLI 值结构
  • C# 类 => C++/CLI 引用类
  • C# 接口 => C++/CLI 接口类
  • C# 可为空的类型,其中 ? => 没有等效项,请使用可为空<>

当心枚举所需的public关键字,这是自 C++11 采用enum class语法以来的必要弊端。

只有 void、bool、short、int、float 和 double 关键字匹配。

在 C# 中,long 是 64 位数据类型。 在C++中,我们对long的了解是,它必须容纳与int一样多或更多的内容,并且至少为32位。 如果在 C++ 中使用保证至少为 64 位的long long,这将与您在 C# 中拥有的位相匹配。