有沒有想過如果我們自己要設計一門編程語言,要做到什么樣的標准才能符合在.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就允許你在它上面運行。