Java與C#區別
1. 源檔案方面。C#可以在一個.cs 檔案中。出現多個name sapce(命名空間,有些類似於pacakage),並定義多個類。C#包含有預先處理指令。
2. 資料類型方面。
a) C#定義了struct(結構),不能是抽象的,也不能被繼承,是實值型別的。
b) C#沒有基本類型的概念,全部是物件導向的類型,int是Int32的簡寫。
c) 在Java中const是保留字,final與C#中的const意思相同,C#中還有readonly允許運行時賦初值。
d) 字串比較,C#中可以用=比較值,與Java一樣用StringBuffer來減少記憶體開銷。
3. 運算子方面。C#增加了Checked和Unchecked以繞過編譯錯誤。比如“把一個long付給int32 ,如果高32為零 則不會出錯,否則會有溢出錯誤,unchekced就是告訴編譯器不要去管溢出,盡你可能轉化”
4. 分支語句方面。在Java中goto是保留字。C#中switch中的case不會順序執行,末尾必須有break或者goto關鍵字。
5. 迴圈語句好像沒有什麼不同的。
6. 存取修飾詞方面。在範圍放main,C#增加了internal和protected internal,前者表示只能從當前程式集內可見,即可以在編譯時間可Assembly的DLL或EXE,類似於JAR;後者表示對當前程式集或者從此包含類繼承的類可見。Sealed相當於Java中的final關鍵字。
7. 方法方面。與Java相同,只有基本類型通過值傳遞,其他都是傳遞引用。不過C#也可以以引用的方式傳遞基本類型,利用ref關鍵字。而out關鍵字有些類似於Oracle預存程序,與ref的區別在於:方法忽略out參數初始值,方法必須為out參數賦值。
8. 屬性方面。Getter和Setter的寫法不太一樣。
9. 繼承方面。C#增加了base關鍵字以指向父類。C#中父類方法中具有virtual關鍵字的才可以被子類重寫,重寫時還需要聲明override。與抽象類別相同,abstract關鍵字也必須被override重寫。C#中的介面不能聲明常量,介面的屬性只是表示Getter或Setter。
10. 事件。Java中沒有(Java通過實現自訂接聽程式類執行事件)。C#定義了類似於函數指標的委託來實現事件。
11. 運算子多載。Java中無。運算子多載必須為類的靜態方法,重載==,其他判等操作也必許重載。
12. 異常方面。與Java非常相似,只是沒有throws關鍵字,無須截獲異常(當然要在程式主入口去截)。
13. C#增加了索引器,可以象訪問數組一樣訪問類或結構。個人感覺就是少些幾個字而已,還造成一定的困擾。
14. C#的Attribute要比Java的Annotation強很多。不過加上AOP後,這種動態功能Java也不錯了。
15. 在C#中也可以直接使用指標,開闢或者回收記憶體,只是要使用兩個關鍵字unsafe和fixed。
原文地址