2009-04-26 245 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使用這個工具包,所以下載它看看它在使用中。