Java与C#和.NET之间的差异

时间:2009-04-26 16:56:27

标签: c# java windows linux user-interface

为可能的火焰线预先道歉,但这不是我想要的。

我只使用C和C ++在Linux上进行过认真的开发,我希望能够深入了解Windows。我一直在做一些阅读和询问,在我看来,带有C#的.NET是为Windows开发面向商业用户的业务应用程序的方法。

对我来说,一个重要的考虑因素是将用户界面集成到桌面中,因为这是用户最终与之交互的内容。例如,是否可以在Java中重新创建Office 2007 GUI的外观,或者这只能用于.NET?

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

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

4 个答案:

答案 0 :(得分:16)

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

如果需要在Windows上工作,那么C#可能比Java更好。有更好的视觉风格,与Windows融为一体。它还使得与本机代码(例如Win32 API或COM库的位)的互操作比Java更容易。我个人更喜欢它作为一种语言,但这是另一回事。

如果你需要在其他平台上运行,我会认真考虑Java。虽然Mono有很大的动力,但它与.NET在它支持的各种平台上的兼容程度不同。

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

答案 1 :(得分:4)

首先,您的GUI在Windows上看起来是否合适将更多地取决于您的GUI设计技能,而不是您选择的语言或工具包。

使用文档化的API,Windows Forms并不能真正完全访问Windows GUI功能。您必须调用本机API函数或至少使用特定于Windows的消息来实现某些效果。此外,我不认为有一种内置的方式来访问Office 2007风格的功能区控件。你需要第三方组件。

许多.Net应用程序依赖第三方窗口小部件集来实现漂亮的GUI。请注意,这些通常依赖于P / Invoke或其他特定于Windows的功能,因此不能用于单声道。因此,如果您真的需要跨平台GUI,.Net不是最佳选择。

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

GTK#在Unix和Windows上运行良好,但在Windows上看起来略逊一筹。

Java Swing是一个非常跨平台的平台本机外观,看起来非常不错。你可以下载Netbeans来看它的实际效果。

SWT是Java的替代工具包,其与Swing的跨平台兼容性略低,但仍然很受欢迎。 Eclipse使用此工具包,因此请下载该工具包以查看其使用情况。

答案 2 :(得分:2)

由于你有C ++的过期,你可以使用C ++和Qt for GUI。它是一个很好的跨平台GUI库,您可以重新编译代码,以便在Windows,Mac和Linux中以一致的外观工作。

当然你可以用它做出很好的界面,但可能不像MS Office界面那样酷(微软混合)。

您可以将其视为一种选择。 http://www.qtsoftware.com/products/

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

答案 3 :(得分: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

此外,许多开发人员更喜欢VS IDE而非Eclipse和C#而不是Java。但如果您的应用程序主要是Windows - 我敢打赌,使用.NET会更好。特别是如果GUI集成是主要关注点,因为使Java应用程序看起来像本机Windows仍然很痛苦。在.NET下,Ribbon界面有很多控件(包括本机界面)。尝试为Java找到相同的外观并且你会明白我的意思

使用Mono(如果您将遵守主要规则),大多数情况下您都不会在应用程序中移植和嵌入Mono本身。