天天看點

CTS----公共類型系統CTS----公共類型系統

CTS----公共類型系統

現在假設你正在開發一款新的語言,這種語言和C#或VB.NET一樣,在編譯後也能生成CIL代碼,也可以在.NET環境下運作,那麼首先需要什麼呢?

根據前面說的知識,要開發的新語言相當于CIL的進階語言版本,是以實際上要做什麼并不是由新語言決定的,而是由CIL來決定的.是以,需要一套CIL的定義,規則或者标準.這套規則定義了我們的語言可以做什麼,不可以做什麼,具有哪些特性.這套規則就是CTS(Common Type System,公共類型系統).任何滿足了這套規則的進階語言都可以稱為面向.NET架構的語言.C#和VB.NET不過是微軟自己開發的一套符合了CTS的語言.實際上還有很多的組織或團隊也開發出了這樣的語言,比如Delphi.NET,FORTRAN等.

那麼CTS具體包括哪些内容呢?在回答這個問題之前需要先明白一個概念,先看一個類:

public class Book
    {
    }
            Book item1 = new Book();
            Book item2 = new Book();
           

對于以上代碼,通常是這麼描述的:定義了一個Book類,并且建立了兩個Book類的執行個體item1,item2.實際上,這隻包含了兩層含義.其實還有一個更高的層面,那就是Book這個類的類型,我們稱之為類類型(Class Type).

類似的,還有枚舉類型(Enum Type),結構類型(Struct Type)等.現在大家應該明白這裡想說啥了吧,CTS規定了可以在語言中定義諸如類,結構,委托等類型,這些規則定義了語言中更高層次的内容.是以,在C#這個具體的語言實作中,我們才可以去定義類類型(Class Type)或者結構類型(struct Type)等.

同樣,可以在Book類中定義一個字段name并提供一個方法ShowName().實際上,這些也是CTS定義的,它規範了類型中可以包含字段(field),屬性(property),方法(method),事件(event)等.

除了定義各種類型外,CTS還規定了各種通路性,比如private,public,family(C#中為protected),Assembly(C#中為internal),,family and assembly(C#中沒有對應的實作),family or assembly(C#中為protected internal).

CTS還定義了一些限制,例如,所有類型都隐式的繼承自System.Object類型,所有類型都隻能繼承自一個基類.從CTS的名稱和公共類型系統可以看出,不僅C#語言要滿足這些限制,所有面向.NET的語言都需要滿足這些限制.衆所周知,傳統C++是可以繼承自多個基類的.為了讓熟悉C++語言的朋友也能在.NET架構上開發應用程式,微軟推出了面向.NET的C++/CIL語言(也叫做托管C++,這樣你是不是又明白了一個概念),它就是符合CTS的C++改版語言,為了滿足CTS規則,它被限制為了隻能繼承自一個基類.

關于上面的内容有兩點需要特别說明:

(1).C#并沒有提供Family and assembly的實作,C#中也沒有全局方法(就是你把方法寫在類的外面是不對的),換句話,C#知識實作了CTS的一部分功能.CTS規範了語言能夠實作的所有能力,但是符合CTS規範的具體語言實作不一定要實作CTS規範所定義的全部功能.

(2)C++/CIL又被限制為隻能繼承自一個基類,換句話,C++中的部分功能被删除了.這就說明,任何語言隻要符合CTS,其中與CTS不相容的部分功能都要舍棄.

顯然,由于CIL是.NET運作時所能了解的語言,是以它實作了CTS的全部功能.雖然它是一種低級語言,但是實際上,它所具有的功能更加完整.C#語言和CIL的關系,可以用下圖表示:

CTS----公共類型系統CTS----公共類型系統

繼續閱讀