我是 C++ 程序员,我正在做一个迁移项目,我需要将 C++ 代码转换为 C#,而我对 C# 知之甚少。
我正在迁移的 C++ 代码有很多指针操作,例如
Hdr->States = (DspState*)baseAddress; // Converting the buffer to other type.
我的问题是,
- 只要我正确跟踪内存,如果我在 C# 中进行不安全的编程,会有什么危害。
- 或者在 C# 中是否有任何其他方式来处理这些类型的指针操作(有时是双指针)。
如果您要将项目从 C++ 移植到 C#,您的首要目标应该是完全保持托管代码的安全世界。仅仅因为您在 C++ 代码中使用了指针并不意味着您必须在 C# 中做同样的事情。C# 中的不安全代码实际上应该是您最后的选择,并且仅在非常特殊的情况下才需要。
您示例中的代码在 C# 中可能像这样,并且不需要任何指针或不安全的操作。
BaseAddress baseAddress = ...
Hdr->States = (DspState)baseAddress;
或作为类型检查的强制转换操作
Hdr->States = baseAddress as DspState;
C# / .NET 一直使用引用,这在某种程度上类似于指针,但没有指针算术的危险。
C# 授权不安全上下文以允许使用指针,因此如果您的代码在 c++ 中工作,它应该在 c# 中运行良好,但取决于您想要做什么,这不是最好的解决方案。例如,如果您使用 c# 中存在的 c++ 库,您可能必须在 c++ 中使用指针,但在 c# 中使用引用。如果您在帖子中显示的那种操作是您使用的唯一一种,我认为您不应该使用不安全的上下文来引用和取消引用指针,您应该对您的代码进行完整的转换。