.NET 框架最主要的兩個組成部分是 CLR 和框架類庫,而 CLR 最主要的兩個組成部分是 CTS(公共型別系統)和 CLS(公共語言規範)。
簡單地說,CTS 就是計算機語言的一種語法和規範。
例如,它允許介面、類、結構、列舉這些型別的存在,並且,規定了每種型別可以或不可以包含什麼成員。
如果 C# 沒了語法,那就沒有類,沒有介面,變成了偽碼。
CTS 是微軟制定的一套標準化語法。它規定了一套約束,就像英語規定所有的字詞都是由 26 個字母組成的一樣,服從這套語法的語言都可以看成是英語(或英語的某種方言),例如中古英語、現代英語都是英語,而德語字母並非英語字母,所以它不是英語。
同理,所有服從 CTS 的語言,都可以看成 .NET 框架的語言。
CTS 定義了型別,型別指的是集合{類、結構、介面、列舉、委託}中的任意一個成員。
.NET 框架的眾多語言各自實現了 CTS 的一部分功能。
做一個不太恰當的類比,C# 可以被認為是“美國英語”,F# 是“英國英語”,而 VB 是“印度英語”。
他們是英語的各種方言。他們共用一部分相同的詞彙,但也各有各的特點。
例如顏色在英國英語中的拼寫是 colour,美國英語則是color。
.NET 框架的眾多語言都只實現 CTS 的一小部分功能,這部分功能稱為 CLS(Common Language Specification,公共語言規範)。
這是這些語言(的程式集)可以相互使用的前提。
如果你建立一個新語言,但不滿足 CLS 的要求,那你的語言就不能被其他 .NET 框架的語言(的程式集)使用。
下圖演示了 CTS 和 CLS 的關係。如果你想實現一個.NET 框架語言,你最少必須實現 CLS 中的功能。