歡迎您光臨本站 註冊首頁

已是 9102 年,你熟知的 C# 還是你剛認識的模樣嗎?

←手機掃碼閱讀     admin @ 2019-05-07 , reply:0

編者註:來到 9102 年,熟知 C# 的開發者,你對 C# 的認識還是之前你認識她的模樣嗎?不熟悉 C# 的開發者,你想知道現在的 C# 都有哪些與時俱進的黑科技嗎?

以下是來自知乎的 Ivony 的 .NET 開發者為你講述《2019年了,C#發展的怎麼樣了呢?》

“C#”的图片搜索结果

----------

簡單講講:

C# 8.0

我估計大多數程序員對於C# 5.0之後的改進都沒有什麼太多的認知,的確從C# 5.0開始C#已經沒什麼太多東西可以從其他語言借鑒,Anders 的重心也開始逐步傾斜到TypeScript,所以從 5.0 引入 async 之後 C# 語言發展速度開始減緩了。

C#6引入了大量的語法糖,例如?.和$""等等都是6.0引入的,這些東西極大的簡化了C#的語法,而C#7.0則進一步的引入了元組、殘破的模式匹配支持和本地函數以及意義深遠的ref和readonly支持的擴大化,ref和readonly ref使得Span系列類型得以引入從而改善了特定場景的性能。更重要的是這些語言層面上的改進使得類庫作者可以寫出特定場景的高性能代碼而避免引入C/C++。至於out變數聲明和throw表達式則是早就該加入的東西並沒有什麼太多的懸念。

值得注意的是7.0開始搞出了小版本號的概念,C#7事實上有四個版本,C#7.0、7.1、7.2和7.3,

C#8.0將在2019年發布,主要的改進包括一個破壞性修改,可空引用類型,估計屆時要啟用這個特性需要加編譯參數,或者可以用編譯參數屏蔽這個特性。這個特性據說是從Kotlin借鑒過來的,這怕是C#出現18年來第二次從Java陣營借鑒(第一次是誕生)。

其他的改進則有相對完整的模式匹配支持(雖然還很醜,而且沒有UnionType/SumType還是殘廢),以及介面默認實現方法(這個倒是Java發明的,用來取代C#當年的擴展方法的用途,然後被C#再抄回去)。語法層面上async stream和Range可以大大簡化特定場景的語法。

.NET Core 3.0

很明顯微軟現在將重心放在了.NET Core這一邊,當然.NET Framework歷史包袱太多,如果我是微軟的程序員也願意把精力放在.NET Core的框架開發上。結果就是.NET Framework 4.8一直難產,而.NET Core則一路高歌從1.0演化到3.0。

為了平滑的遷移現有應用程序,微軟在.NET Core上重新實現了大部分的.NET Framework的API,當然GUI的除外,儘管如此微軟還是提供了GDI的部分API的實現也就是System.Drawing。

http://ASP.NET部分則因為歷史包袱太多被全部重寫,事實上我非常贊成這一決定。儘管http://ASP.NET Core是全部重寫的,但是Razor和MVC的大部分語法和功能被保留下來,所以原有MVC的應用也能輕鬆遷移。不過,Razor的helper功能被移除仍然讓我非常不爽。

新的TagHelper我認為是非常正確的道路,而事實上這就是十年前我的Jumony for MVC嘗試做的事情。

平台/生態

最後聊聊平台和生態。

事實上C#和Java就是一種語言……基本上你可以認為這兩者的親緣關係就像是JavaScript和TypeScript。所以說如果你會C#那是沒有道理看不懂或者寫不了Java代碼的。當然反過來會有點麻煩(如果你會Kotlin的話,可能更有助於學會C#)。這就像你會TS肯定能看懂JS一樣……

所以糾結語言是沒有什麼意義的,C#和Java的主要差別在於庫函數,這也是目前阻礙兩邊程序員跨界的重要因素。Java嗶一樣的語法很多時候並不是我最難以忍受的,更難以忍受的是嗶一樣的基礎類庫。

在BCL這一塊,微軟是毋庸置疑的Top 1。當然,在網際網路時代,微軟的老派作風使得對新技術和新思想的響應速度不如開源社區,尤其是對Linux和開源社區並不明朗的態度,這使得.NET誕生的這十幾年來一直未能取代Java,甚至讓後者做大做強。

開源的精神內核是開放,作為一個老派的程序員(掐指一算入行都二十年了),我覺得開放的心態是我還能活躍在一線寫代碼的原因。Java開源社區有很多好東西,也經過了很多項目的檢驗,.NET其實也是可以用的,畢竟,其實C#本來就是從Java改進而來,他們之間的共同點比差異多太多了。互操作性也遠比其他語言容易得多,他們都是把元數據嵌到程序集裡面的。

我現在做.NET Core的應用,用Eureka和Consul做服務發現,用apollo做配置中心,所有這些都不是C#寫的而是Java寫的,但這絲毫沒有任何問題。開源的生態本來就是開放的,在我看來,未來是各種語言混合互操作的天下,雖然和.NET最開始的願景在細節上有些偏差。但是我認為未來本來就不會用生態和語言來劃分程序員……


[admin ]

來源:Ivony
連結:https://www.zhihu.com/question/321350186/answer/672775689
已是 9102 年,你熟知的 C# 還是你剛認識的模樣嗎?已經有291次圍觀

http://coctec.com/news/all/show-post-205110.html