从编码层面对比java和c#
java和c#都是面向對象編程高級語言,總體上來講,它們還是很相似的,因為它們在發展過程中都很大程序上學習了對方不少優秀的特性。所以,一般來說,從其中一門語言轉換到另外一門語言應該都不會有很大問題。
雖然說這兩門語言很相似,但還是有一些不同點,如果我們能夠掌握這些不同點,則可以更加容易的實現兩門語言之間的切換,編寫出更加專業的代碼。
之前寫過一篇文章(從Java轉向.NET/C#,Are You OK?),從highlevel層面對比了java和.net/c#兩個技術棧,通過這篇想必大家對.net/c#技術棧會有一個比較全面直觀的認識。接下來從編碼角度對這兩門語言進行一個對比,這些也應該是一個Java程序員轉為c#程序員剛開始最需要適應和理解的點:
編碼風格
c#里面方法命名建議大寫打頭,follow pascal case;而java里面方法名是小寫打頭,follow camel case。
c#里面常量命名follow pascal case;而java里面常量命名單詞全大寫,單詞之間用下劃線連接。
c#里面左右大括號都獨立成一行;java里面左大括號不獨立成一行。
語法層面
java里面有pacakge的概念;c#里面對應的是namespace。
java里面引入某一個package下面的類,用import;c#里面對應的是using。
java里面繼承父類和實現接口分別是extend和implement;c#里面都用冒號(:)。
java里面調用父類方法用super;c#里面對應是base。
java里面定義一個immutable類用final;c#里面對應是sealed。
java里面防止方法被重寫用final;c#里面對應是sealed,在多重繼承復寫方法的場景可能會用到。
java里面public或protected方法默認都是可以被重寫;c#里面默認都是不可被重寫,如果要可被重寫,需要加virtual標明。
java里面子類復寫方法用@Override標注;c#里面則是用override關鍵字。
java里面定義常量用final static;c#里面對應是const。更加準確的說,java里面的final對應c#里面的readonly,java里面的final static對應c#里面的const。
java里面有checked exception和non-checked exception(RuntimeException)之分;c#里面只有non-checked exception。
java里面的annotation概念;c#里面對應的是attribute。
java里面可變參數是...;c#里面對應是params。
java里面一個java文件只能包含一個public class,并且文件名要和類名相同;c#則沒有這個限制,可以包含多個public class。
c#里面有property(屬性)概念;java里面沒有,但可用getter/setter方法替代。
c#里面有delegate(委托)概念;java里面沒有。委托,代表一個方法的引用,是c#一開始就有的概念,和后來新增的lambda概念類似,都是對函數式編程(一個顯著特征就是:函數可以作為參數傳遞)的支持。java是到了java 8才支持lambda,在之前如果有傳遞函數的場景,都是通過匿名類來實現。
c#里面有extension method(擴展方法)概念;java里面沒有。擴展方法,正如其名,可以實現對標準方法的擴展。參考我的另外一篇文章(從Java轉向.NET/C#,Are You OK?)。
c#里面可以直接用@打頭實現一個string的轉義。
c#里面可以用int?表示一個可為null的int變量(here int is primitive type);java里面只能用Integer。
相關閱讀
從Java轉向.NET/C#,Are You OK?
對比Java和.NET多線程編程
那些年用過的開源項目(.net/c# stack)
References
https://blogs.msdn.microsoft.com/mschray/2013/05/06/practical-naming-standards-for-c/
https://www.oracle.com/technetwork/articles/javaee/codeconventions-135099.html
總結
以上是生活随笔為你收集整理的从编码层面对比java和c#的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让 .NET 轻松构建中间件模式代码
- 下一篇: 红帽借“订阅”模式成开源一哥,首创者升任