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