【问题标题】:Is there an effective tool to convert C# code to Java code? [duplicate]是否有将 C# 代码转换为 Java 代码的有效工具? [复制]
【发布时间】:2010-09-09 21:05:44
【问题描述】:

有没有有效的工具将 C# 代码转换为 Java 代码?

【问题讨论】:

  • @Rachel:我是 Java 新手,但对 C# 非常了解,我偶然发现 SourceForce 上的一个开源 Java 项目似乎已经死了,我想将其功能转换为一个新的 C# 项目。我想要一个这样的工具,让它完成一些繁重的工作并至少转换基本的方法和结构,之后我可以看到结果并用我的大脑将剩下的东西翻译成我可以在我的内部使用的东西.NET 舒适区。
  • @Rachel:炼金术。人们总是试图把毫无价值的东西变成黄金。 ;P
  • 是的,大多数时候被遗弃的项目都非常有价值。我发现的最后一个被遗弃的项目只是潜伏在 PSC 代码中,让我完全自动化了 7200 美元,我喜欢它。直到它再次过时:S
  • @Darth,这不就是 IKVM 的用途吗?
  • 如果另一个问题问的完全相反,这个问题怎么会被标记为重复?

标签: java c# code-translation


【解决方案1】:

它们不直接转换,但它允许 .NET 和 J2EE 之间的互操作性。

http://www.mainsoft.com/products/index.aspx

【讨论】:

  • 链接是旧的,现在只指向 SharePoint 产品。
【解决方案2】:

Microsoft 有一个工具可以将 java 转换为 C#。对于相反的方向,请查看 herehere。如果这样不行,手动转换源码应该不会花太长时间,因为C#和java很相似,

【讨论】:

  • 我使用了微软的 JLCA,它确实有效:weblogs.asp.net/jgalloway/archive/2007/01/24/…
  • “C# 和 java 很相似”哈哈哈,开个玩笑,在 C# 中使用泛型后在 java 中尝试泛型
  • C# 的早期版本与 Java 几乎一模一样,但现在似乎已经走得更远了。
【解决方案3】:

我从来没有遇到过 C#->Java 转换工具。语法很简单,但框架却截然不同。即使有工具,我也强烈建议不要使用它。我曾参与过几个“迁移”项目,并且不能过分强调虽然转换似乎是一个不错的选择,但转换项目总是总是会变成钱坑。这不是捷径,你最终得到的是不可读的代码,并且没有利用目标语言。根据个人经验,假设重写是更便宜的选择。

【讨论】:

  • 换句话说,最有效的“工具”是程序员。 :-)
  • 那是说你仍然会得到一个加分,因为重写几乎肯定会更便宜,产生更好的产品并让程序员更好地理解。
  • @MichaelMeadows:您是根据个人经验发言吗?在相反的方向,Java->C#(这是一个更容易转换的方向),我个人使用 Tangible Software 的转换器节省了很多时间和麻烦,转换 50K 行。它完全符合我的预期:它处理了所有烦人的琐碎细节,如果我用新语言手动重新键入所有代码,我必须自己做这些。让我可以专注于需要实际思考的地方。仍然需要手动进行许多小改动,但避免了重新输入时可能出现的粗心错误。
  • @ToolmakerSteve 是的,事实上我知道。我会说这个。进入应用程序的大部分工作都不是打字。是解决问题。这些问题的解决方式(解决方案的核心)因所采用的语言和框架而异。从 Java 转到 C# 可能更容易(因为 .Net 堆栈往往更加标准化),但您最终仍会得到难以推理的代码,没有利用目标语言,并最终创建更高的产能提升和维护拖累生产力。
【解决方案4】:

C# 比 Java 有更多的特性。以委托为例:许多非常简单的 C# 应用程序都使用委托,而 Java 人员认为观察者模式就足够了。因此,为了让工具转换使用委托的 C# 应用程序,它必须将结构从使用委托转换为观察者模式的实现。 另一个问题是 C# 方法默认不是虚拟的,而 Java 方法是虚拟的。此外,Java 没有办法使方法成为非虚拟方法。这产生了另一个问题:C# 中的应用程序可以通过多态性以不直接转换为 Java 的方式利用非虚拟方法行为。 如果您环顾四周,您可能会发现有很多工具可以将 Java 转换为 C#,因为它是一种更简单的语言(请不要激怒我,我没有说更糟,我说的是更简单);但是,您会发现很少有像样的工具可以将 C# 转换为 Java。

我建议您更改从 Java 转换为 C# 的方法,因为从长远来看,这样会减少令人头疼的问题。 Db4Objects 最近向公众发布了他们用来将 Db4o 转换为 C# 的内部工具。它被称为锐化。如果您在他们的网站上注册,您可以查看此链接,其中包含有关如何使用 Sharpen 的说明: http://developer.db4o.com/Resources/view.aspx/Reference/Sharpen/How_To_Setup_Sharpen

(我已经在他们那里注册了一段时间,他们很擅长不发送垃圾邮件)

【讨论】:

  • 我想到了 linq。如何将使用 linq 的代码翻译成 java?
  • "Java 没有办法让方法成为非虚拟的。" - Java 有 'final' 关键字,相当于 c 语言中的 'seal',放在方法之前。
【解决方案5】:

我不确定您希望将 C# 转换为 java 的目的是什么,但如果您需要 .net 互操作性,您可能需要查看Mono

【讨论】:

    【解决方案6】:

    这是即兴的,但这不是Grasshopper 的用途吗?

    【讨论】:

    • 这会将 CIL (MSIL) 转换为 java 字节码。肯定有用,但不是OP要求的直接。我会说更有可能实际上有用除了一次性转换之外的任何东西,但你去吧。
    • Grasshopper 似乎仍然不可用。如果您阅读 this article 上的 cmets,那么 Grasshopper 似乎没有被广泛使用或功能丰富。似乎Mainsoft has changed focus(这可能是我再也找不到它的原因)。
    【解决方案7】:

    尝试查看Net2Java 在我看来,从 C# 到 Java 的自动(或至少半自动)转换的最佳选择

    【讨论】:

      【解决方案8】:

      我们有一个需要用 C# 和 Java 维护的应用程序。由于我们积极维护这个产品,一次性移植不是一种选择。我们调查了 Net2Java 和 Mainsoft 工具,但都没有满足我们的要求(Net2Java 缺乏健壮性,而 Mainsoft 成本高且缺乏源代码转换)。我们创建了自己的工具CS2J,它作为我们夜间构建脚本的一部分运行,并将我们的 C# 代码非常有效地移植到 Java。现在它正好可以翻译我们的应用程序,但要成为一个综合工具还有很长的路要走。我们已经将这项技术授权给有类似需求的几方,并且我们正在考虑公开发布它的想法,但我们的核心业务让我们这些天太忙了。

      【讨论】:

      • 啊,但是如果你将它作为开源发布,你会发现使用它的人(嗯,他们中的一些人)会扩展它以满足他们的需求 - 这可能会成为你未来的需求.如果您从许可证中赚的钱很少,您不妨这样做。
      • @gbjbaanb,成功的开源项目需要培育和建立一个社区。在不关心源代码的情况下转储源代码,意味着大多数开源开发人员会首先考虑其他选择。
      • 只是为了更新 - CS2J 现已作为开源发布。 (除此之外,我个人不知道任何事情,至少现在还不知道。)
      • 我假设您的工具针对的是一组非常特定的库(这将使事情更容易从 X 转换为 Y 并返回),但可能不适用于更广泛的库或特定的 Java 和/或相互独立的 C# 库(想到的是 LINQ)。迈克,你怎么看?
      • @theGreenCabbage Rustici Software 员工在这里。见cs2j.com/features。该工具确实针对 .NET 系统库的有限子集(尤其是 LINQ 不可翻译),这可能基于我们当时的需要。但是单个类的翻译是由 XML 文件处理的,为您需要的任何类添加一个新的 XML 文件很容易。
      【解决方案9】:

      好吧,语法几乎相同,但它们依赖于不同的框架,因此唯一的转换方法是让懂两种语言的人转换代码:) 你的问题的答案是否定的,没有“有效”的工具将 c# 转换为 java

      【讨论】:

        【解决方案10】:

        此博客post 建议来自Tangible 的有用结果。

        【讨论】:

        • 这些都很好 - 2021 年这里有免费和付费版本。并非所有内容都可以 100% 准确转换。我确实喜欢事件转换的方式。对有形的大 +1。
        • @Andez 感谢您的更新。很高兴知道他们还在继续!
        【解决方案11】:

        These 伙计们似乎对此有解决方案,但我还没有尝试过。他们也有转换器的演示版。

        【讨论】:

          【解决方案12】:

          您可以改用jni4net - opensource bridge 吗? 或者other options我知道的列表。

          【讨论】:

          • 对于那些好奇的人来说,jni4net 是 JVM 和 CLR 之间的桥梁。它允许在 CLR 上运行的 .Net 代码(如 VB 或 C#)也可以在 JVM 中执行代码,并允许在 JVM 上运行的 Java 代码在 CLR 中执行 cod。有关更多信息,请阅读2009/10/10, 2009/10/31, and 2009/11/03 posts on the blog,因为似乎没有页面说明它的作用。
          • 各位,如果您对桥接解决方案感兴趣,请查看Javonet
          【解决方案13】:

          虽然这是一个老问题,但看看 xmlVM http://www.xmlvm.org/clr2jvm,我不确定它是否足够成熟,尽管它已经存在了好几年了。我相信,XMLvm 主要用于将 Android Java 应用程序翻译到 iPhone,但是,它基于 XML 代码翻译的框架足够灵活,可以进行其他组合(参见网站上的图表)。

          至于进行这种转换的原因,可能需要“劫持”一些highly abundant oss code 并在他/他们自己的 [Java] 项目中使用它。

          干杯

          丰富

          【讨论】:

            【解决方案14】:

            为什么不用 Haxe (http://haxe.org/) 编写它并将其转换为您想要的任何形式?

            【讨论】:

            • 我猜是因为他已经有 C# 代码。
            • 嗯,这把问题变成了如何将C#转换为Haxe,然后它应该可以转换为Java。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-01-05
            • 2010-10-28
            • 2012-11-04
            • 2014-09-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多