Java與C#的比較學習記錄(2)

來源:互聯網
上載者:User

1) I/O:這個東西其實比較沒什麼意義,不過java的流概念跟C#的流概念其實都差不多,繼承體系都差不多,只是Java中是Input,Output,而C#中是Read和Write.其實各自支援類中的方法名大部分都相同.當然,C# 除了流支援外,還相容原來的一些檔案讀寫.
2)序列化:對象的序列化兩者都有支援,做法都差不多,當然,C# 中除了二進位序列化外,還可以序列化成XML格式(Java中有不有還有待更進一步瞭解).序列化的用途其實也差不多(主要是RMI).
3)反射機制:兩者的反射機制差不多,當然,在這個方面C#的要完善一些,還加入了元屬性(Attribute)的概念(Java中有不有類似的東西,學到目前還沒發現,Java中的註解在C#中應該是///表達的東西).C#的反射內在機制我比較瞭解,Java的就不是很瞭解。但這種東西在Delphi中很早就有類似實現,只是沒有現在的C#這樣完善。當然,delphi還是欠缺些,而Java和C#都足夠用。
4)多線程:這個其實是與語言無關的東東,不過在Java和C#中基本的實現方法還是差不多,類名都一樣,只是方法名一個是run,一個叫Execute.Java中可以用Runable介面來簡化線程的建立,C# 中是用方法和委託(包括Lamda運算式)來完成同樣的工作.C#中的線程池(嚴格講這屬於架構而不是語言),背景工作之類的可以看作是一些二次封裝的東西,沒有對比的價值.
5)代碼注入:C#和Java都是基於中繼語言(C#的IL,Java的位元組碼),因此在實現代碼注入上都比較方便,因此Spring中的面向方面的實現方法在C#中也很容易實現(可以參考我前面的博文).

6)重載:雙方都支援方法的重載,而且規則基本差不多.為了簡化這種重載C#中可以用參數預設和params關鍵字來減少方法的個數,比如public void DoF(params object[] pms),調用的時候可以是DoF(p1),也可以是DoF(p1,p2...)等,這個在Java中是使用"..."來定義的:public void DoF(Object...pms).Java不支援參數預設,參數預設有其方便性,但不是必需(Delphi中很早就支援)。

7)委託和事件:這是帶有函數指標,回調方法等味道的東東,找了一下,在Java中沒有類似的概念,如果需要實作類別似的東西,需要用到設計模式,比如觀察者,代理等。C#,Delphi都有這個東西,這其實還是個非常好用的東西。我覺得Java完全可以借鑒升級一下(我查了一下,Java確實沒有類似的東西,當然,也可能是我孤陋寡聞),Java沒有這個可能是源於對純物件導向語言的追求和對指標濫用的某種不安。
補充:經過查閱資料,Java中也有回呼函數的實現,但實際上,這不是真正意義上的回呼函數,只是一種類比類似功能的東西.因為其傳入的其實不是方法,而是類.從這個角度來看,我前面說的關於Java沒有委託和事件的原因,估計是對的.

8)逆變和協變:其實只要是物件導向編程,存在繼承就有這兩種情況(方法的參數和傳回值)。但大家只要把握一個原則:老子能用的地方兒子也能用,反之則不然。

 

總結:如果你對資料結構,作業系統,演算法,物件導向編程等比較瞭解,其實相互轉換還是比較容易的。做為苦B的程式員,完全沒有必要為語言的排名而糾結,學習語言要有淩駕於語言層面之上的意識。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.