将C++移植到C#

Bun*_*ori 5 c# c++ refactoring

在我看来,C++和C#是非常类似的编程语言.如果需要将C++代码移植到C#是唯一支持的平台的平台上,那么需要完成多少工作?

我应该准备好了,大多数C++代码需要重写为C#吗?或者,由于语言的相似性,重构是否应该非常容易和直接?

我知道,它将取决于应用程序本身,但我总的来说.

Bro*_*ass 24

我最近为C#做了一个C++应用程序的主要端口.总的来说,我认为这是一次愉快的经历.这些是我采取的步骤,它们可能适用于您的应用程序,也可能不适用.

  1. 在C#中使用"脚手架",设计您的架构.如果您选择这样做,现在是从现有应用程序进行主要体系结构更改的时候了.
  2. 让你的测试到位.我不能过分强调这个.由于您要移植现有应用程序,因此您应该已经有一组测试来验证应用程序的正确行为.您可以而且应该为C#应用程序重用这些测试.这是在移植时为您提供优势的一件事 - 您知道(并且已经编写)了许多您想要的测试.开始移植测试项目.
  3. 为您的C#方法添加反映现有C++方法的方法存根.鉴于C#中的框架支持,可能根本不需要某些方法,或者非常简化 - 现在是时候决定了.
  4. 复制并粘贴.是的我对大多数C++代码使用了复制和粘贴 - 如果你小心的话,所有的流程语句基本上都可以重用.一旦粘贴一行一行,必须重写诸如使用指针等许多东西以使用等效的C#类型.
  5. 一旦你以这种方式重新编写了一个方法,给定你可能在C++中缺少的框架支持/辅助类,然后在C#中随时可用,就可以进行明显的重新分解.此外,变量等的命名约定可以在这里更改,如果在VS 2010中内置支持,应该是直截了当的.
  6. 运行测试!尽早测试并且通常到目前为止你所拥有的整体框架产生与你可以用作参考的C++应用程序完全相同的输出.这也是添加缺失测试的时候.
  7. 重构,重构,重构.每个应用程序都会老化,最有可能是您的C++应用程序.仔细查看底层设计,尽可能简化和删除.通过运行测试在每个步骤验证.


Joh*_*dol 7

首先,这是移植而不是重构.我认为这是一个非常糟糕的主意.

确实,您可以(通过大量工作)将C++端口转换为不安全的C#,但是说语法非常相似有点紧张.实际上,按照相同的推理方式,您可以将C++移植到任何其他C派生语言,这同样会让人感到痛苦.

再说一遍,如果你这样做,那么就会有大量的返工.使用现有的代码作为模型,这很可能不仅仅是从头开始重新编码,在我看来,这是一个更好,更少杂乱的选择.