从Java转向.NET/C#,Are You OK?
最近由于項目變動,需要用.NET/C#做開發,經過一段時間的學習和培訓,對這個技術棧有了一定的理解。大家可能都知道Java和.NET/C#很像,這里粗略的把兩者做一個對比,希望對感興趣的童鞋有所幫助。
如果現在有人問我:.NET/C#怎么樣啊?我的回答會是:用.NET/C#做開發,上手確實快,很適合小項目開發;但是生態遠不如Java,所以這也是它流行度不如Java的原因。(TIOBE Index for October 2019)
首先,解釋一下.NET Framework和.NET Core的區別:.NET Framework是老一代的.NET平臺,只能運行在Windows機器上,所以嚴格來講,.NET Framework并不是完全的跨平臺;.NET Core是新一代的.NET平臺,2016年才推出,能夠實現真正的跨平臺,可以運行在Windows、Linux、Mac OS等機器上,這就和Java一致了。微軟的計劃是在.NET 5統一這兩個平臺,意思之后只會有一個統一的平臺,就叫.NET。
關于.NET體系中各個平臺的關系,可以參考下圖(https://devblogs.microsoft.com/cesardelatorre/net-core-1-0-net-framework-xamarin-the-whatand-when-to-use-it/):
上圖除了.NET Framework和.NET Core之外,還提到一個Xamarin,它是專門用于開發移動端應用的平臺。這又讓我聯想到了Java,起初Java也分成了三個平臺:J2ME、J2SE、J2EE,感覺Xamarin有點對標J2ME,主要focus在移動端開發,.NET Core對標J2SE,而ASP.NET Core就是對標J2EE。
Java和.NET的比較
下面是我整理的Java和.NET的比較列表,可以看到它們確實很像,基本上很多概念都可以對應起來。
之前在微軟官網瀏覽介紹ASP.NET的頁面時,看到.NET的性能比Java Servlet高出很多,居然高出兩倍還多,讓我很是驚訝。(具體參考https://dotnet.microsoft.com/learn/aspnet/what-is-aspnet-core)
另外,關于.NET Framework版本的進化歷史,可以從下圖粗略了解到:
出處:https://www.geeksforgeeks.org/c-sharp-net-framework-basic-architecture-component-stack/
Java和C#語法比較
C#的語法由ECMA334定義(https://www.ecma-international.org/publications/standards/Ecma-334.htm),而Java的語法是由Java Languge Specification定義(https://docs.oracle.com/javase/specs/)。
一點題外話,關于ECMA,我們耳熟能詳的可能就是ECMAScript,即是javascript的超集,ECMAScript是由ECMA262定義。ECMA其實是一個標準組織,我們聽得比較多的另一個標準組織就是ISO(國際標準組織),記得之前做過一個task,就用到了ISO關于日期格式定義的一個標準ISO 8601。在我之前關于編碼的一篇文章(關于編碼的那些事),也有提到一些關于編碼的ISO標準,比如ISO-8859-1。
關于Java和C#兩個語言語法的比較,這里推薦一個網址(http://www.javacamp.org/javavscsharp/),里面有非常詳細的對比:
除上面列出的之外,我想再額外補充下面一點:
Extension methods(擴展方法):擴展方法是C#的概念,主要是用在一個類提供的標準方法滿足不了需求的時候,可以擴展 這個類,提供一些額外的方法以實現自定義的功能;Java里面沒有這樣的概念,如果要實現這樣的需求,只能通過繼承或者組合來實現。這里提到繼承,在Java里,繼承的關鍵字是extend,而extend的關鍵字就是擴展的意思,這可能就是Java語言設計者的本意吧,通過繼承來實現一些擴展的功能。其實extension這是一個很大的話題,不光在語言本身層面需要考慮,在應用層面,其實也常常需要考慮,比如說字段的擴展、流程的擴展等。這里的擴展方法,則可能更多的像是一種流程的擴展。
References
http://www.javacamp.org/javavscsharp/
.NET/C#在性能測試中表現很不錯:https://www.osnews.com/story/5602/nine-language-performance-round-up-benchmarking-math-file-io/
總結
以上是生活随笔為你收集整理的从Java转向.NET/C#,Are You OK?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何编写高性能的C#代码(一)
- 下一篇: .NET Core开发实战(第21课:中