C#.NET中的CTS、CLS和CLR

來源:互聯網
上載者:User

標籤:

以下內容來自:http://www.cnblogs.com/zagelover/articles/2741370.html

在學習.NET的過程中,都會不可避免地接觸到這三個概念,那麼這三個東西是什麼以及它們之間的關係是怎樣的呢?我們在學習的過程中可能比較過多的會去關注CLR,因為CLR是.NET Framework的核心,但是我要說的是CTS和CLS更為重要,因為他們是CLR的核心。任何程式設計語言,如果想要在.NET CLR上執行,就必需提供一個編譯器,將此語言的程式編譯成.NET CLR所認識的metadata以及IL,符合CTS的規定。並非所有的語言都能和C#一樣符合CTS的規範,畢竟許多語言出現在先,CTS出現在後,所以有一些舊的語言未能符合CTS的規定。這類的語言在.NET中有下列三種方式來符合CTS規範:

 

- 改變語言本身以符合CTS的規定。例如Visual Basic 6就為此做了大幅度的擴充與改變,加上繼承的特性,這使得新版的Visual Basic .NET 差不多可以算是一個全新的語言了,猶如當年C衍生出C++一樣。

 

- 擴充語言本身以接近CTS的規定,但仍保留不相容於CTS的文法,如此一來,程式中符合CTS規定的以CTS方式編譯,不符合CTS規定的則以傳統的方式編譯成native code。例如C++ with Managed Extension (簡稱MC++) 就是如此。

 

- 語言本身盡量維持不變,一切都是通過超強的編譯器設計來達成和CTS的相容,Eiffel就是如此的作法。例如,CTS不支援多重繼承(multiple inheritance),但是Eiffel支援多重繼承,通過Eiffel的編譯器可以利用interface以及attribute來達到多重繼承(這樣的作法相當巧妙,有興趣的讀者不妨去研究一下)。

 

好,現在讓我們來看一下它們三者的關係。

1)CTS一般型別系統(Common Type System)

CTS不但實現了COM的變數相容類型,而且還定義了通過使用者自訂類型的方式來進行類型擴充。任何以.NET平台作為目標的語言必須建立它的資料類型與CTS的類型間的映射。所有.NET語言共用這一類型系統,實現它們之間無縫的互操作。該方案還提供了語言之間的繼承性。例如,使用者能夠在VB.NET中派生一個由C#編寫的類。我們可以將CTS 看成是所有.NET 語言的superset (union),而符合CTS 的各種不同的語言,其實都只是CTS 的subset (intersection)。這些語言所寫出來的程式,如果想要有最佳的相容性,以便互相調用(invoke) 或繼承,這些語言之間就必需取得一個共同的subset,有共同遵守的規範,這就是CLS 。

2)CLS通用語言規範(Common Language Specification)

很顯然,程式設計語言的區別不僅僅在於類型。例如,一些語言支援多繼承性,一些語言支援無符號資料類型,一些語言支援運算子多載。使用者應認識到這一點,因此.NET通過定義Common Language Specification(CLS:Common Language Specification),限制了由這些不同引發的互通性問題。CLS制定了一種以.NET平台為目標的語言所必須支援的最小特徵,以及該語言與其他.NET語言之間實現互通性所需要的完備特徵。認識到這點很重要,這裡討論的特徵問題已不僅僅是語言間的簡單文法區別。例如,CLS並不去關心一種語言用什麼關鍵字實現繼承,只是關心該語言如何支援繼承。CLS是CTS的一個子集。這就意味著一種語言特徵可能符合CTS標準,但又超出CLS的範疇。例如:C#支援無符號數字類型,該特徵能通過CTS的測試,但CLS卻僅僅識別符號數字類型。因此,如果使用者在一個組件中使用C#的無符號類型,就可能不能與不使用無符號類型的語言(如VB.NET)設計的.NET組件實現互操作。

 

3)CLR公用語言運行庫(Common Language Runtime)

簡單地說,CLR是CTS的實現,也就是說,CLR是應用程式的執行引擎和功能齊全的類庫,該類庫嚴格按照CTS規範實現。作為程式執行引擎,CLR負責安全地載入和運行使用者程式碼,包括對不用對象的記憶體回收和安全檢查。在CLR監控之下啟動並執行代碼,稱為Managed 程式碼(managed code)。

 

 

C#.NET中的CTS、CLS和CLR

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.