本文將介紹以下內(nèi)容:
1. 引言
本文不是連環(huán)畫,之所以在開篇以圖形的形式來展示本文主題,其實就是想更加特別的強調(diào)這幾個概念的重要性和關(guān)注度,同時希望從剖析其關(guān)系和聯(lián)系的角度來講述.NET Framework背后的故事。因為,在作者看來想要深入的了解.NET,必須首先從了解類型開始,因為CLR技術(shù)就是基于類型而展開的。而了解類型則有必要把焦點放在.NET類型體系的公共基礎(chǔ)架構(gòu)上,這就是:通用類型系統(tǒng)(Common Type System, CTS)。
我之所以將最基本的內(nèi)容以獨立的章節(jié)來大加筆墨,除了為后面幾篇關(guān)于對類型這一話題深入討論做以鋪墊之外,更重要的是從論壇上、博客間,我發(fā)現(xiàn)有很多同行對.NET Framework基礎(chǔ)架構(gòu)的幾個重要體系的理解有所偏差,因此很有必要補上這一課,必備我們在深入探索知識的過程中,能夠游刃有余。
2. 基本概念
還是老套路,首先引入MSDN對通用類型系統(tǒng)的定義,通用類型系統(tǒng)定義了如何在運行庫中聲明、使用和管理類型,同時也是運行庫支持跨語言集成的一個重要組成部分。通用類型系統(tǒng)執(zhí)行以下功能:
那么我們?nèi)绾蝸砝斫饽兀?/p>
還是一個現(xiàn)實的場景來引入討論吧。小王以前是個VB迷,寫了一堆的VB.NET代碼,現(xiàn)在他變心了,就投靠C#的陣營,因為流行嘛。所以當(dāng)然就想在當(dāng)前的基于C#開發(fā)的項目中,應(yīng)用原來VB.NET現(xiàn)成的東西,省點事兒:-)。那么CLR是如何來實現(xiàn)類型的轉(zhuǎn)換的,例如Dim i as Single變量i,編譯器會自動的實現(xiàn)將i由Single到float的映射,當(dāng)然其原因是所有的.NET編譯器都是基于CLS實現(xiàn)的。具體的過程為:CTS定義了在MSIL中使用的預(yù)定義數(shù)據(jù)類型,.NET語言最終都要編譯為IL代碼,也就是所有的類型最終都要基于這些預(yù)定義的類型,例如應(yīng)用ILDasm.exe分析可知,VB.NET中Single類型映射為IL類型就是float32,而C#中float類型也映射為float32,由此就可以建立起VB.NET和C#的類型關(guān)系,為互操作打下基礎(chǔ)。
過去,由于各個語言在類型定義方面的不一致,造成跨語言編程實現(xiàn)的難度,基于這一問題,.NET中引入CTS來解決各個編程語言類型不一致的問題,類型機制使得多語言的代碼可以無縫集成。因此CTS也成為.NET跨語言編程的基礎(chǔ)規(guī)范,為多語言的互操作提供了便捷之道。可以簡單的說,基于.NET的語言共同使用一個類型系統(tǒng),這就是CTS。
進一步的探討通用類型系統(tǒng)的內(nèi)容,我們知道CTS支持兩種基本的類型,每種類型又可以細分出其下級子類,可以以下圖來表示:
.NET提供了豐富的類型層次結(jié)構(gòu),從上圖中也可以看出該層次結(jié)構(gòu)是基于單繼承層次實現(xiàn)的,反映了.NET面向?qū)ο笤瓌t中實現(xiàn)單繼承、接口多繼承的特點。關(guān)于值類型和引用類型,是之后要探討的重點內(nèi)容,也是『品味類型』子系列的重中之重,在此不作進一步探討,但是上面的這張圖有必要清楚的印在心中,因為沒有什么比這個更基礎(chǔ)的了。
3. 位置與關(guān)系
位置強調(diào)的是CTS在.NET技術(shù)框架中的位置和作用,作者期望以這種方式來自然的引出.NET技術(shù)架構(gòu)的其他基本內(nèi)容,從而在各個技術(shù)要點的層次中,來講明白各個技術(shù)要點的些細聯(lián)系,從大局的角度來對其有個基本的把握。我想,這樣也可以更好的理解CTS本身,因為技術(shù)從來都不是孤立存在的。
.NET技術(shù)可以以規(guī)范和實現(xiàn)兩部分來劃分,而我們經(jīng)常強調(diào)和提起的.NET Framwork,主要包括公共語言運行時(Common Language Runtime, CLR)和.NET框架類庫(Framework Class Library, FCL),其實是對.NET規(guī)范的實現(xiàn)。而另外一部分:規(guī)范,我們稱之為公共語言架構(gòu)(Common Language Infrastructure, CLI),主要包括通用類型系統(tǒng)(CTS),公共語言規(guī)范(Common Language Specification, CLS)和通用中間語言(Common Intermediate Language, CIL)。我們以圖的形式來看看CTS在.NET技術(shù)陣營中的位置,再來簡要的介紹新登場的各個明星。
可見,這些基本內(nèi)容相互聯(lián)系,以簡單的筆墨來澄清其概念、聯(lián)系和功能,顯然還不夠力度。然而在此我們以拋磚引玉的方式來引入對這些知識的探求,目的是給一個入口,從此來進行更深入的探索是每個設(shè)計人員的成長的關(guān)鍵,就像對FCL的認識,需要實踐,需要時間,需要心思。
4. 通用規(guī)則
其實,我們常用的int、char、string對應(yīng)的是System.Int32、System.Char、System.String的別名。
5. 結(jié)論
類型的話題,是個老掉牙的囫圇覺,但也是個永不言退的革命黨。在實際的程序設(shè)計中,我們經(jīng)常要吃這一虧。因為,很多異常的產(chǎn)生,很多性能的損耗,很多冗余的設(shè)計都和類型解下不解之緣,所以清晰、清楚的了解類型,沒有什么不可以。重要的是,我們以什么角度來了解和化解,內(nèi)功的修煉還是要從內(nèi)力開始。本系列不求包羅萬象,但求以更新鮮、更全面的角度,清楚、干凈、深入的把某個問題說透,此足尹。
品味類型,就從CTS開始了。
參考文獻
(USA)Jeffrey Richter, Applied Microsoft .NET Framework Programming
(USA)David Chappell, Understanding .NET
廣而告之
[預(yù)告]
簡要的探索了CTS的基本知識和幾個關(guān)系,我們將要把筆墨著重在對類型的深入探索上,近期本系列就以類型這一話題為核心來了解以下幾個相關(guān)主題:值類型和引用類型,裝箱與拆箱,強類型等。這些概念和技術(shù)都是.NET基本知識中最重要的內(nèi)容,我將通過自己的視角和觀點來揭開類型概念中的重要知識點,層層深入、循序漸進的打開通向.NET更深層次的大門。
所以,本文是個鋪墊,下回會更精彩和期待。
聯(lián)系客服