【问题标题】:Differences between Java and C# and .NET [closed]Java、C# 和 .NET 之间的差异 [关闭]
【发布时间】:2009-04-26 16:56:26
【问题描述】:

提前为可能的火焰线程道歉,但这不是我想要的。

我只在 Linux 中使用 C 和 C++ 进行过认真的开发,并且我正在寻求涉足 Windows。我一直在做一些阅读和询问,在我看来,使用 C# 的 .NET 是为 Windows 开发面向商业用户的商业应用程序的方式。

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

我还担心便携性。将来,我可能希望将应用程序移植到 Linux。我知道 mono 项目,但我想知道使用 Java 会不会更好。

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

【问题讨论】:

  • 这里没有火焰 - 这是一个完全合理的问题和一个重要的选择。

标签: c# java windows linux user-interface


【解决方案1】:

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

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

如果您需要在其他平台上运行,我会认真考虑 Java。虽然Mono 有很大的发展势头,但它与 .NET 的兼容性不如 Java 在它支持的各种平台上的兼容性。

所以基本上,要非常仔细地权衡“可能想要移植”方面 - 从我的角度来看,这是决定的驱动因素。一旦您决定进行移植,如果您的 90% 的客户都在 Windows 上,这并不重要 - 对于剩下的 10%,它仍然需要工作,并且工作良好。

【讨论】:

  • 在 Mono OK 中工作的代码在任何平台上都以这种方式工作。所以你关于平台兼容性的说法是错误的。
  • 兼容性是一种双向关系。在 Windows CLR 下工作的 Mono 代码只是要求的一半。 Mono 不支持许多功能,因此在 Windows 上编写的大量 .Net 代码在 Mono 上不起作用。
  • .NET 2.0 BCL 100% 被 Mono 覆盖,除了一些 Microsoft Windows 特定的东西。还有一个非常有用的工具 mono-project.com/MoMA 可以从 .NET 迁移到 Mono。大多数时候,在 Mono 下运行 .NET 应用程序只需要很少的精力。
  • @Mash:覆盖率可能是 100%,但这并不意味着它们在所有情况下的行为方式都相同。直到 Mono 是从与 .NET 相同的源构建的(如 Java 中的情况),我非常怀疑它是否具有相同程度的兼容性。我认为 Mono 是一个很棒的项目,但我认为我现在还不相信我的业务。
  • 事实上,举个例子:最近有人在检查我的 MiscUtil 库和 Mono 时,他们发现 Mono 使用 TextReader 处理文件末尾的空行时存在错误。此外,我相信由于编译器错误,Mono 仍然无法编译我的 Protocol Buffers 实现。 (以前有各种各样的问题,但现在显然只有一个 - 我打算有时间看看。)
【解决方案2】:

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

Windows 窗体并没有真正让您使用记录在案的 API 来完全访问 Windows GUI 功能。您必须调用本机 API 函数或至少使用特定于 Windows 的消息来实现某些效果。另外,我认为没有内置方式可以访问 Office 2007 风格的功能区控件。为此,您需要一个 3rd 方组件。

许多 .Net 应用程序依赖 3rd 方小部件集来实现美观的 GUI。请注意,这些通常依赖于 P/Invoke 或其他特定于 Windows 的功能,因此不适用于单声道。所以如果你真的想要一个跨平台的 GUI,.Net 不是最好的选择。

您也可以在 Windows Presentation Foundation 中创建 .Net GUI,但同样不支持单声道。

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

Java Swing 是非常跨平台的,并且具有平台原生的外观和感觉,看起来相当不错。您可以下载 Netbeans 以查看它的实际效果。

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

【讨论】:

  • +1 为您的 GUI 工具包介绍
【解决方案3】:

由于您已使用 C++,因此您可以使用 C++ 和 Qt for GUI。这是一个很好的跨平台 GUI 库,您可以重新编译代码以在 Windows、Mac 和 Linux 中以一致的外观工作。

当然你可以用它做出漂亮的界面,但可能不如 MS Office 界面(微软混合)那么酷。

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

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

【讨论】:

  • 有 Qt 功能区吗?
【解决方案4】:

如果应用程序主要用于 Windows - 使用 .NET。 如果您以后认真考虑移植 - 避免使用 P/Invoke、.NET 以上 2.0 功能和具有丰富 GUI(不在 Mono 上运行)的 3rd 方工具包 目前有不错的商业 .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 本身移植和嵌入到应用程序中的问题。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多