我应该准备好了,大多数C ++代码都需要重写为C#吗?或者,由于语言的相似性,重构是否应该非常容易和直接?
我知道,它将取决于应用程序本身,但我一般都在询问。
答案 0 :(得分:22)
我最近为C#做了一个C ++应用程序的主要端口。总的来说,我认为这是一次愉快的经历。这些是我采取的步骤,它们可能适用于您的应用程序,也可能不适用。
答案 1 :(得分:7)
首先,这是移植而不是重构。我认为这是一个非常糟糕的主意。
确实,您可以(使用很多工作)将C ++端口转换为不安全的C#,但是说语法非常相似有点过时了。实际上,按照相同的推理方式,您可以将C ++移植到任何其他C派生语言中,这同样会很痛苦。
同样,如果你这样做,那么就会有大量的返工。使用现有的代码作为模型,这很可能不仅仅需要你从头开始重新编码,这在我看来是一个更好,更少杂乱的选择。
答案 2 :(得分:3)
使用/ clr编译器选项编译C ++代码。这会将代码转换为IL,它可以在大多数支持.NET的平台上执行。很少有C ++构造无法翻译,它必须使用非标准的编译器扩展,如__fastcall。
但是,我怀疑您会发现该平台需要可验证的代码。这是平台将代码限制为.NET兼容语言的常见原因。由于你没有提到执行环境,我无法猜测。由于指针操作,转换为IL的本机C ++无法验证。如果是这种情况,那么你正在寻找一个非常激烈的重写。
答案 3 :(得分:0)
我有兴趣知道C#在哪里是“唯一支持的平台”。
用新语言重写的问题可能是你是否需要重写代码的每一部分而根本不能使用任何旧代码。有时最好,即使在进行重写时,也要使其更像是一个重构:重写代码的某些部分,移动其他代码。已知现有代码可以工作,并且可能很难再现。这需要时间。需要有充分的理由进行完全重写。
.NET支持C ++版本,Visual Studio也附带Visual C ++来构建标准C ++,因此请考虑是否可以将其分阶段转换,以及是否真的必须重写整个事物。
答案 4 :(得分:-1)
将C ++代码移植到C#并不会那么难,假设所有依赖库都有现有的C#对应物。缺乏依赖性是最可能的陷阱。程序的核心概念,例如继承,堆,引用,数据结构,应该是相当容易翻译的。
这假设您没有调用任何特定的低级行为,例如自定义内存管理,因为C#并不真正支持那种事情,并且您可能会遇到严重问题。