C++/CLI 和 C# 中的类型 "long" 有什么区别?
What is the difference between type "long" in C++/CLI and C#?
在 C++/CLI 项目中,我有方法 void DoSomething(long x);
。如果我想在用 C# 编写的任何单元测试中使用它,方法参数 x
显示为类型 int
.
为什么我必须将签名更改为 void DoSomething(long long x);
才能在我的单元测试 (C#) 中将其与 long
类型的参数一起使用?
在 C# 中 long
是 64 位数据类型。在 C++ 中,我们对 long
的了解是它必须包含与 int
一样多或更多的内容,并且它至少为 32 位。如果您在 C++ 中使用 long long
,保证至少为 64 位,这将匹配您在 C# 中的内容。
long
是 C# 和 C++ 中的关键字。他们根本不是同一件事。 C++/CLI 设计者选择了 C++ 解释,因为 C++ 是目标互操作语言。
不完全是唯一不直观的映射:
- C# 字节 => C++/CLI 无符号字符
- C# sbyte => C++/CLI 字符
- C# 字符 => C++/CLI wchar_t
- C# ushort => C++/CLI unsigned short
- C# uint => C++/CLI unsigned int
- C# long => C++/CLI long long
- C# ulong => C++/CLI unsigned long long
- C# 字符串 => 没有等效项,使用 System::String^
- C# 十进制 => 没有等效项,使用 System::Decimal
- C# 对象 => 没有等价物,使用 System::Object^
- C# 枚举 => C++/CLI public 枚举 class
- C# 结构 => C++/CLI 值结构
- C# class => C++/CLI 参考 class
- C# 接口 => C++/CLI 接口 class
- 带有 ? 的 C# 可空类型=> 没有等价物,使用 Nullable<>
注意枚举所需的 public
关键字,这是自 C++11 采用 enum class
语法以来必不可少的邪恶。
只有 void、bool、short、int、float 和 double 关键字匹配。
在 C++/CLI 项目中,我有方法 void DoSomething(long x);
。如果我想在用 C# 编写的任何单元测试中使用它,方法参数 x
显示为类型 int
.
为什么我必须将签名更改为 void DoSomething(long long x);
才能在我的单元测试 (C#) 中将其与 long
类型的参数一起使用?
在 C# 中 long
是 64 位数据类型。在 C++ 中,我们对 long
的了解是它必须包含与 int
一样多或更多的内容,并且它至少为 32 位。如果您在 C++ 中使用 long long
,保证至少为 64 位,这将匹配您在 C# 中的内容。
long
是 C# 和 C++ 中的关键字。他们根本不是同一件事。 C++/CLI 设计者选择了 C++ 解释,因为 C++ 是目标互操作语言。
不完全是唯一不直观的映射:
- C# 字节 => C++/CLI 无符号字符
- C# sbyte => C++/CLI 字符
- C# 字符 => C++/CLI wchar_t
- C# ushort => C++/CLI unsigned short
- C# uint => C++/CLI unsigned int
- C# long => C++/CLI long long
- C# ulong => C++/CLI unsigned long long
- C# 字符串 => 没有等效项,使用 System::String^
- C# 十进制 => 没有等效项,使用 System::Decimal
- C# 对象 => 没有等价物,使用 System::Object^
- C# 枚举 => C++/CLI public 枚举 class
- C# 结构 => C++/CLI 值结构
- C# class => C++/CLI 参考 class
- C# 接口 => C++/CLI 接口 class
- 带有 ? 的 C# 可空类型=> 没有等价物,使用 Nullable<>
注意枚举所需的 public
关键字,这是自 C++11 采用 enum class
语法以来必不可少的邪恶。
只有 void、bool、short、int、float 和 double 关键字匹配。