Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、Data Science

[.net framework 工程師看.net core][03]工程師的語言 C#

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上一篇介紹完了.Net Framework的概觀(起源.Net Framework) - 在這一篇將會介紹和.Net Framework一起誕生的語言:C#

將會了解到C#版本的歷史、主要版本之間的功能差異和.Net Compiler Platform (Roslyn) 帶來的差異

C#是什麼

C#(唸法:C Sharp)是一個語法結構類似Java的OO語言。和.Net Framework一起誕生出來,可以說C#是.Net 開發的第一語言。

目前組新的版本是 C# 7.1

C#版本功能

基本上C#會和某一個.Net Framework版本搭配,並且也會搭配某一個Visual Studio (VS) 版本一起release。

和VS一起release的原因是有些語法糖的修改,舉例來說VS 2015就不支援C# 7.0的語法 - 在VS 2015上面會出現好像錯誤,但是可以透過更新.Net Compiler Platform來達到編譯成功

相關可以參考:[Visual Studio]如何在Visual Studio 2015使用C#7的功能?

image
C# 和 .Net 版本對應和版號。 來源:http://www.webdevelopmenthelp.net/2015/06/new-features-in-csharp-6.html

每一個Release基本上都會有一個主要的主題:

  1. 2.0 - 加入 泛型(Generic)因為如此1和2不兼容
  2. 3.0 - 加入 Linq
  3. 4.0 - 加入 dynamic
  4. 5.0 - 加入 async await
  5. 6.0 - 比較偏語法糖(syntax sugar)類型的修改
  6. 7.0 - 比較偏語法糖(syntax sugar)類型的修改
更多版本之間的差異可以參考:The history of C#

.Net Framework如何執行C#程式

image
整個編譯和執行過程

C#經過編譯器(compiler)編譯之後產生的是所謂的Intermediate Language (IL),最後當使用者執行的時候,CLR在把 IL run 起來透過及時編譯(JIT compile)變成機器碼(machine code)執行在機器上面。

由於run 起來的CLR會幫忙管理底層的一些資源,例如memory的管理,因此C# 又稱之為managed code。

除了C#以外的其他.Net Framework語言

精準一點說,.Net Framework (CLR) 支援的語言只有一種,那就是 IL。

不過.Net Framework一起帶來的工具裡面包含compiler支援3種語言編譯成為IL:

  1. C#
  2. VB .Net - 語法類似VB6,當初.Net剛出來希望鼓勵大家轉.Net因此提供
  3. F# - 偏Functional Programing的語言,Serverless的服務Azure Function就有支援

不管是這三種語言的那種,最後compile之後(不管是exe還是dll)都是IL - 因此3種語言的結果是可以互相使用。換句話說,VB .Net寫的Library,可以直接在C#的console使用。

compiler的進化

在早期版本的C# compiler是和.Net Framework一起安裝的,這個compiler的程式名稱是csc.exe

不過因為很多原因(例如更容易做meta programing等好處),後來compiler被獨立出來,變成一個自己的專案叫做.Net Compiler Platform (aka Roslyn) (官方repo)。

image
.Net Framework的csc只有支援到C# 5

因為這個原因,所以C# 6.0以上的compiler使用的都是Roslyn。

Roslyn的一個好處是,能夠用nuget package安裝並且在編譯的時候自動使用nuget裝的版本,而不是電腦安裝的版本。這個在CI建制上也更加方便。

image
可以看到Roslyn和bin包在了一起,並且Roslyn還是保留了csc.exe

結語

在這篇對於C#的基本功能有做了基本的介紹,並且也對Roslyn - 新的compiler做了基本介紹。

對於整個.Net平台和開發的語言C#應該有了一些基本的概念了之後,接下來就可以看一下.Net Core的平台概觀和.Net Framework有什麼不同。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus