有沒有想過如果我們自己要設計一門編程語言,要做到什麼樣的標準才能符合在.Net平臺下運行的條件呢?.Net在官方描述過一段話,大體的意思變成白話是:只要你的語言在編譯後能夠轉換成CIL代碼,那麼你的語言就可以在.Net平臺下進行開發和運行。 CIL語言之所以能夠在.Net平臺下運行,實際上它是符合了 ...
有沒有想過如果我們自己要設計一門編程語言,要做到什麼樣的標準才能符合在.Net平臺下運行的條件呢?.Net在官方描述過一段話,大體的意思變成白話是:只要你的語言在編譯後能夠轉換成CIL代碼,那麼你的語言就可以在.Net平臺下進行開發和運行。
CIL語言之所以能夠在.Net平臺下運行,實際上它是符合了.Net的一套規則,這套規則定義了我們設計的編程語言可以做什麼,不可以做什麼,具有哪些特征。那麼這條規則其實就稱作CTS(通用類型系統),任何滿足了這套規則的高級語言就可以被稱為面向.Net平臺的語言。換言之,就是你想在.Net平臺下使用自己設計的編程語言進行開發和運行,那麼就必須符合CTS的標準。
在.Net平臺下自帶的一些編程語言,比如C#、VB.NET等。它們其實不過是開發的一套符合了CTS標準的語言,實際上還有很多的組織或團隊,也遵循CTS的標準開發設計出了一些語言,比如Delphi.NET、FORTRAN等。
CTS規則包含的內容
類型
這裡的類型要註意的是,並不是我們在開發中自定義類型(學生類、商品類),這裡所說的類型是CTS通用類型系統中包含的類型,而我們的自定義類型是在這個基礎之上的延申。CTS支持五種類型:類(Class)、枚舉(Enum)、介面(interface)、結構(Struct)、委托(delegate),其中每個類別均有其特定的語義和用法。,這些類型其中可以將其劃分為兩類:值類型和引用類型。
類型成員
比如我們可以在自定義類型中定義一個Name屬性並提供一個ShowName()方法。實際上這個實現操作就是CTS允許定義的類型行為和類型成員,這其中主要包括:欄位、屬性、方法、構造函數、事件、嵌套類型。
類型可訪問性
所有類型都會有一個訪問修飾符,比如我們熟知的:private、public、protected、internal等等。這些修飾符就構建了各個類型之間對其的訪問許可權。
更多
當然CTS中的規則內容不僅僅只有以上介紹到的這些,其中還包含很多方面。這其中任意一點的深入介紹就已超出本文章的介紹範圍,本文主要目的是弄CTS的基本概念,如果需要深入瞭解其中每個規則內容則可以瀏覽官方文檔:https://docs.microsoft.com/zh-cn/dotnet/standard/common-type-system
遵循CTS標準的補充說明
非全部實現
所有需要在.Net平臺下使用的編程語言都必須符合CTS的規則,但這個符合併不是要求編程語言實現CTS的全部標準。比如C#本身,它也沒有全部實現CTS所有的標準,也只實現了CTS的一部分功能。那有沒有實現了CTS所有標準的語言呢?答案是有的,由於CIL是.Net運行時所能理解的語言,因此CIL實現了CTS全部的功能。
迎合捨棄
傳統的C++是可以繼承多個基類的,為了讓熟悉C++語言的開發者也能在.Net平臺下開發應用程式,微軟就實現了一種面向.Net的C++語言。而這個舉措就代表了微軟自實現的C++就必須遵循CTS規則,那麼原有的繼承多個基類的標準在移植到.Net平臺後就必須捨棄,從而遵循CTS:類只能繼承一個基類的規則。
個人總結
CTS的存在更加體現出了.Net的跨語言性,.Net並不是為某個單獨的語言提供服務的,也沒有跟某個語言形成依賴,它是有一套通用的規則,這個規則就是CTS。那麼不管你是什麼語言,只要你符合CTS的規則,那麼.Net就允許你在它上面運行。
知識改變命運