2009-04-26 212 views
13

为可能的火线提前道歉,但那不是我要做的。Java和C#和.NET之间的区别

我只使用C和C++在Linux中进行过严肃的开发,而且我正在努力探索Windows。我一直在做一些阅读和询问,在我看来,使用C#的.NET是开发用于Windows的商业用户导向业务应用程序的方式。

我的一个重要考虑是将用户界面集成到桌面,因为这是用户最终与之交互的内容。例如,是否有可能在Java中重新创建Office 2007 GUI的外观,还是仅在.NET中才可能?

我也关心可移植性。将来,我可能希望将应用程序移植到Linux。我知道单声道项目,但我想知道是否用Java来做更好。

简而言之,在开发主要面向Windows的商用,面向用户的业务应用程序时,Java和C#之间的平衡点是什么?

+1

这里没有火焰 - 这是一个完全合法的问题和重要的选择。 – 2009-04-26 17:23:50

回答

16

最重要的位是“主要用于Windows”。

如果你只有只有需要在Windows上工作,C#可能会比Java更好。有更好的各种视觉风格与Windows融合得很好。它还使与本地代码(例如Win32 API或COM库的某些部分)的互操作性比Java更容易。我个人更喜欢它作为一种语言,但这是另一回事。

如果您需要在其他平台上运行,我会认真考虑Java。虽然Mono具有相当多的动力,但它与.NET所支持的各种平台并不具有与.NET相同的兼容性。

因此,基本上,我非常小心地衡量“可能要移植”的方面 - 这是决定的驱动因素,从我的角度来看。一旦你决定做一个端口,如果90%的客户都在使用Windows,这并不重要 - 它仍然需要工作,并且运行良好,剩下的10%。

+0

在Mono OK中工作的代码可以在任何平台上以这种方式工作。所以你关于与平台兼容性的陈述是错误的。 – Mash 2009-04-26 18:42:06

+1

兼容性是一种双向关系。在Windows CLR下工作的单声道代码只是需求的一半。 Mono不支持很多功能,因此在Windows上编写的大量.Net代码在Mono上不起作用。 – 2009-04-26 18:46:52

+0

.NET 2.0 BCL除了一些Microsoft Windows特定的东西外,被Mono覆盖100%。并且有非常有用的工具http://mono-project.com/MoMA从.NET迁移到Mono。大多数情况下,只需很少的努力就可以在Mono下运行.NET应用程序。 – Mash 2009-04-26 19:05:37

0

如果应用程序主要用于Windows - 使用.NET。 如果你对以后的移植很认真 - 避免使用P/Invoke,.NET 2.0以上版本的特性和第三方工具包以及丰富的GUI(不在Mono上运行) 目前有很好的商业.NET跨平台应用程序,包括漂亮的http://www.codicesoftware.com/xpfront.aspx plastic scm UI http://www.plasticscm.com/screenshots/gui27/visual/brexplorer04.png 和其他许多人 - http://www.mono-project.com/Companies_Using_Mono

而且许多开发商在Eclipse和C#对Java喜欢VS IDE。但是如果你的应用程序主要是Windows,我敢打赌最好使用.NET。特别是如果GUI集成是主要问题,因为使Java应用程序看起来像本地Windows仍然很痛苦。在.NET下,有很多控件用于Ribbon界面(包括原生界面)。尝试找到相同的Java与适当的外观,你会明白我的意思

随着单声道(如果你将保持主要规则)大部分时间你不会有一个问题,移植和嵌入单声道本身你的申请。

2

既然您已经使用C++过期了,那么您可以使用C++加Qt来进行GUI。这是一个很好的跨平台GUI库,您可以重新编译代码,以一致的外观在Windows,Mac和Linux中工作。当然,你可以用它做出很好的界面,但也许不如MS Office界面(微软混合)那么酷。

您可以考虑将其作为选项。 http://www.qtsoftware.com/products/

例子 http://www.qtsoftware.com/qt-in-use

4

首先,你的GUI是否会好看的窗口将依赖比它更会与GUI设计你的技能,你选择语言或工具包。

Windows窗体并不真正让您使用记录的API完全访问Windows GUI功能。您必须调用本机API函数,或者至少使用特定于Windows的消息来实现某些效果。另外,我不认为有内置的方式来访问Office 2007样式的色带控件。你需要一个第三方组件。

许多.Net应用程序依赖第三方小部件集来实现漂亮的GUI。要警告的是,这些频繁地依赖于P/Invoke或其他特定于窗口的功能,因此不适用于单声道。所以如果你真的想要一个跨平台的GUI,.Net并不是最好的选择。

您还可以在Windows Presentation Foundation中执行.Net GUI,但单声道不支持此功能。

GTK#在Unix和Windows上运行良好,虽然它在Windows上看起来略微低一些。

Java Swing是一个非常跨平台的平台,外观非常漂亮,平台原生的外观和感觉。你可以下载Netbeans来看看它的行动。

SWT是Java的替代工具包,它的跨平台兼容性略低于Swing,但仍然很受欢迎。 Eclipse使用这个工具包,所以下载它看看它在使用中。