识别在Java和C#中编译但运行方式不同的代码

时间:2009-10-02 06:39:59

标签: c# java

我不得不通过复制和粘贴然后编辑编译器错误将代码从Java移植到C#(很快就会反过来)。 (请接受这是必要的;如果需要我可以解释)。是否存在两种语言中相同代码片段运行方式不同的情况?我将包括在一个语言中定义顺序或操作或运算符优先级但在另一个语言中未定义的情况,但排除在两者中未定义的情况。

我会特别感兴趣的是可以识别这些片段的任何开发工具。

@Thomas。谢谢。 J#不是一个选项 - 代码被强制要在C#中。你的评论中“this”是指什么?

4 个答案:

答案 0 :(得分:7)

一个例子 - Java在超类构造函数之后运行变量初始值设定项。 C#之前运行它们。如果超类构造函数然后调用在相关类中重写的虚方法,则会影响事物。 (这通常是一个坏主意,但它确实发生了。)

然后当然有泛型,这是非常非常不同的。例如:

public class Foo<T>
{
    static int counter;
}

在Java中有一个 counter变量。在C#中,每个构造类型都有一个,因此Foo<string>.counterFoo<int>.counter是独立的。

我担心我不知道有任何工具来识别这种事情。

我自己已经完成了一定数量的Java移植到C#,我认为尽可能将生成的代码作为惯用的“sharpy”非常重要。例如,将getter和setter转换为属性,有时将索引器转换为索引器。在适当的地方实施IDisposable ......这样的事情。

答案 1 :(得分:4)

从Java转换为C#很困难,不仅因为语言不同,还因为不兼容的基本库。至于我,从Java转换为.Net的最佳方法是使用IKVM - 用于Mono / .NET的Java实现

答案 2 :(得分:2)

也许Java语言转换助手向导可以在这里为您提供帮助吗?

http://msdn.microsoft.com/en-us/library/7tatw8a2(VS.80).aspx

此外,我建议使用Resharper或其他重构工具来利用C#语言功能,使代码更高效,更易读。

编辑:

V3适用于VS2005,如果您似乎没有安装它,请阅读此内容:http://natarajana.com/jlca.aspx

答案 3 :(得分:0)

IKVM是在C#中运行java代码的绝佳选择。您无需修改​​Java代码。它只需要一个jar文件并生成一个.NET dll。

http://www.ikvm.net/

从C#到java的另一个方向将是困难的,因为C#基本上是java的超集。您需要限制java中不可用的构造的使用。