欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統開(kāi)始

本文將介紹以下內容:

  • .NET 基礎架構概念 
  • 類(lèi)型基礎
  • 通用類(lèi)型系統
  • CLI、CTS、CLS的關(guān)系簡(jiǎn)述

 

1. 引言

 

 

本文不是連環(huán)畫(huà),之所以在開(kāi)篇以圖形的形式來(lái)展示本文主題,其實(shí)就是想更加特別的強調這幾個(gè)概念的重要性和關(guān)注度,同時(shí)希望從剖析其關(guān)系和聯(lián)系的角度來(lái)講述.NET Framework背后的故事。因為,在作者看來(lái)想要深入的了解.NET,必須首先從了解類(lèi)型開(kāi)始,因為CLR技術(shù)就是基于類(lèi)型而展開(kāi)的。而了解類(lèi)型則有必要把焦點(diǎn)放在.NET類(lèi)型體系的公共基礎架構上,這就是:通用類(lèi)型系統(Common Type System, CTS)。

我之所以將最基本的內容以獨立的章節來(lái)大加筆墨,除了為后面幾篇關(guān)于對類(lèi)型這一話(huà)題深入討論做以鋪墊之外,更重要的是從論壇上、博客間,我發(fā)現有很多同行對.NET Framework基礎架構的幾個(gè)重要體系的理解有所偏差,因此很有必要補上這一課,必備我們在深入探索知識的過(guò)程中,能夠游刃有余。

2. 基本概念

還是老套路,首先引入MSDN對通用類(lèi)型系統的定義,通用類(lèi)型系統定義了如何在運行庫中聲明、使用和管理類(lèi)型,同時(shí)也是運行庫支持跨語(yǔ)言集成的一個(gè)重要組成部分。通用類(lèi)型系統執行以下功能:

  • 建立一個(gè)支持跨語(yǔ)言集成、類(lèi)型安全和高性能代碼執行的框架。
  • 提供一個(gè)支持完整實(shí)現多種編程語(yǔ)言的面向對象的模型。
  • 定義各語(yǔ)言必須遵守的規則,有助于確保用不同語(yǔ)言編寫(xiě)的對象能夠交互作用。

那么我們如何來(lái)理解呢?

還是一個(gè)現實(shí)的場(chǎng)景來(lái)引入討論吧。小王以前是個(gè)VB迷,寫(xiě)了一堆的VB.NET代碼,現在他變心了,就投靠C#的陣營(yíng),因為流行嘛。所以當然就想在當前的基于C#開(kāi)發(fā)的項目中,應用原來(lái)VB.NET現成的東西,省點(diǎn)事兒:-)。那么CLR是如何來(lái)實(shí)現類(lèi)型的轉換的,例如Dim i as Single變量i,編譯器會(huì )自動(dòng)的實(shí)現將i由Single到float的映射,當然其原因是所有的.NET編譯器都是基于CLS實(shí)現的。具體的過(guò)程為:CTS定義了在MSIL中使用的預定義數據類(lèi)型,.NET語(yǔ)言最終都要編譯為IL代碼,也就是所有的類(lèi)型最終都要基于這些預定義的類(lèi)型,例如應用ILDasm.exe分析可知,VB.NET中Single類(lèi)型映射為IL類(lèi)型就是float32,而C#中float類(lèi)型也映射為float32,由此就可以建立起VB.NET和C#的類(lèi)型關(guān)系,為互操作打下基礎。

.method public hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// 代碼大小 15 (0xf)
.maxstack 1
.locals init (float32 V_0)
IL_0000: nop
IL_0001: ldc.r4 
1.
IL_0006: stloc.
0
IL_0007: ldloc.
0
IL_0008: call 
void [mscorlib]System.Console::WriteLine(float32)
IL_000d: nop
IL_000e: ret
// end of method BaseCts::Main

過(guò)去,由于各個(gè)語(yǔ)言在類(lèi)型定義方面的不一致,造成跨語(yǔ)言編程實(shí)現的難度,基于這一問(wèn)題,.NET中引入CTS來(lái)解決各個(gè)編程語(yǔ)言類(lèi)型不一致的問(wèn)題,類(lèi)型機制使得多語(yǔ)言的代碼可以無(wú)縫集成。因此CTS也成為.NET跨語(yǔ)言編程的基礎規范,為多語(yǔ)言的互操作提供了便捷之道??梢院?jiǎn)單的說(shuō),基于.NET的語(yǔ)言共同使用一個(gè)類(lèi)型系統,這就是CTS。

進(jìn)一步的探討通用類(lèi)型系統的內容,我們知道CTS支持兩種基本的類(lèi)型,每種類(lèi)型又可以細分出其下級子類(lèi),可以以下圖來(lái)表示:

 

.NET提供了豐富的類(lèi)型層次結構,從上圖中也可以看出該層次結構是基于單繼承層次實(shí)現的,反映了.NET面向對象原則中實(shí)現單繼承、接口多繼承的特點(diǎn)。關(guān)于值類(lèi)型和引用類(lèi)型,是之后要探討的重點(diǎn)內容,也是『品味類(lèi)型』子系列的重中之重,在此不作進(jìn)一步探討,但是上面的這張圖有必要清楚的印在心中,因為沒(méi)有什么比這個(gè)更基礎的了。  

3. 位置與關(guān)系

位置強調的是CTS在.NET技術(shù)框架中的位置和作用,作者期望以這種方式來(lái)自然的引出.NET技術(shù)架構的其他基本內容,從而在各個(gè)技術(shù)要點(diǎn)的層次中,來(lái)講明白各個(gè)技術(shù)要點(diǎn)的些細聯(lián)系,從大局的角度來(lái)對其有個(gè)基本的把握。我想,這樣也可以更好的理解CTS本身,因為技術(shù)從來(lái)都不是孤立存在的。

.NET技術(shù)可以以規范和實(shí)現兩部分來(lái)劃分,而我們經(jīng)常強調和提起的.NET Framwork,主要包括公共語(yǔ)言運行時(shí)(Common Language Runtime, CLR)和.NET框架類(lèi)庫(Framework Class Library, FCL),其實(shí)是對.NET規范的實(shí)現。而另外一部分:規范,我們稱(chēng)之為公共語(yǔ)言架構(Common Language Infrastructure, CLI),主要包括通用類(lèi)型系統(CTS),公共語(yǔ)言規范(Common Language Specification, CLS)和通用中間語(yǔ)言(Common Intermediate Language, CIL)。我們以圖的形式來(lái)看看CTS在.NET技術(shù)陣營(yíng)中的位置,再來(lái)簡(jiǎn)要的介紹新登場(chǎng)的各個(gè)明星。

 

  • CLI,.NET技術(shù)規范,已經(jīng)得到ECMA(歐洲計算機制造商協(xié)會(huì ))組織的批準實(shí)現了標注化。
  • CTS,本文主題,此不冗述。
  • CLS,定義了CTS的子集,開(kāi)發(fā)基于CTS的編譯器,則必須遵守CLS規則,由本文開(kāi)頭的圖中就可以看出CLS是面向.NET的開(kāi)發(fā)語(yǔ)言必須支持的最小集合。
  • CIL,是一種基于堆棧的語(yǔ)言,是任何.NET語(yǔ)言編譯產(chǎn)生的中間代碼,我們可以理解為IL就是CLR的匯編語(yǔ)言。IL定義了一套與處理器無(wú)關(guān)的虛擬指令集,與CLR/CTS的規則進(jìn)行映射,執行IL都會(huì )翻譯為本地機器語(yǔ)言來(lái)執行。常見(jiàn)的指令有:add, box, call, newobj, unbox。另外,IL很類(lèi)似于Java世界里的字節碼(Bytecode),當然也完全不是一回事,最主要的區別是IL是即時(shí)編譯(Just in time, JIT)方式,而B(niǎo)ytecode是解釋性編譯,顯然效率上更勝一躊。
  • .NET Framework,可以說(shuō)是CLI在windows平臺的實(shí)現,運行與windows平臺之上。
  • CLR,.NET框架核心,也是本系列的核心。類(lèi)似于Java世界的JVM,主要的功能是:管理代碼執行,提供CTS和基礎性服務(wù)。對CLR的探討,將伴隨著(zhù)這個(gè)系列的成長(cháng)來(lái)慢慢展開(kāi),在此就不多說(shuō)了。
  • FCL,提供了一整套的標準類(lèi)型,以命名空間組織成樹(shù)狀形式,樹(shù)的根是System。對程序設計人員來(lái)說(shuō),學(xué)習和熟悉FCL是突破設計水平的必經(jīng)之路,因為其中數以萬(wàn)計的類(lèi)幫助我們完成了程序設計絕大部分的基礎性工作,重要的是我們要知道如何去使用。

可見(jiàn),這些基本內容相互聯(lián)系,以簡(jiǎn)單的筆墨來(lái)澄清其概念、聯(lián)系和功能,顯然還不夠力度。然而在此我們以?huà)伌u引玉的方式來(lái)引入對這些知識的探求,目的是給一個(gè)入口,從此來(lái)進(jìn)行更深入的探索是每個(gè)設計人員的成長(cháng)的關(guān)鍵,就像對FCL的認識,需要實(shí)踐,需要時(shí)間,需要心思。 

4. 通用規則

  • .NET中,所有的類(lèi)型都繼承自System.Object類(lèi)。
  • 類(lèi)型轉換,通常有is和as兩種方式,具體的探討可以參考我的另一拙作《第一回:恩怨情仇:is和as》。另外,還有另外的幾個(gè)類(lèi)型轉換的方式:(typename)valuename,是通用方法;Convert類(lèi)提供了靈活的類(lèi)型轉換封裝;Parse方法,適用于向數字類(lèi)型的轉換。
  • 可以給類(lèi)型創(chuàng )建別名,例如,using mynet = Anytao.net.MyClass,其好處是當需要有兩個(gè)命名空間的同名類(lèi)型時(shí),可以清楚的做以區別,例如:
using AClass = Anytao.net.MyClass;
using BClass = Anytao.com.MyClass;

其實(shí),我們常用的int、char、string對應的是System.Int32、System.Char、System.String的別名。

  • 一個(gè)對象獲得類(lèi)型的辦法是:obj.GetType()。
  • Typeof操作符,則常在反射時(shí),獲得自定義類(lèi)型的Type對象,從而獲取關(guān)于該類(lèi)型的方法、屬性等。
  • 可以使用 CLSCompliantAttribute 將程序集、模塊、類(lèi)型和成員標記為符合 CLS 或不符合 CLS。
  • IL中使用/checked+開(kāi)關(guān)來(lái)進(jìn)行基元類(lèi)型的溢出檢查,在C#中實(shí)現這一功能的是checked和unchecked操作符。
  • 命名空間是從功能角度對類(lèi)型的劃分,是一組類(lèi)型在邏輯上的集合。

5. 結論

類(lèi)型的話(huà)題,是個(gè)老掉牙的囫圇覺(jué),但也是個(gè)永不言退的革命黨。在實(shí)際的程序設計中,我們經(jīng)常要吃這一虧。因為,很多異常的產(chǎn)生,很多性能的損耗,很多冗余的設計都和類(lèi)型解下不解之緣,所以清晰、清楚的了解類(lèi)型,沒(méi)有什么不可以。重要的是,我們以什么角度來(lái)了解和化解,內功的修煉還是要從內力開(kāi)始。本系列不求包羅萬(wàn)象,但求以更新鮮、更全面的角度,清楚、干凈、深入的把某個(gè)問(wèn)題說(shuō)透,此足尹。

品味類(lèi)型,就從CTS開(kāi)始了。  

 

參考文獻

(USA)Jeffrey Richter, Applied Microsoft .NET Framework Programming

(USA)David Chappell, Understanding .NET

廣而告之

[預告]

簡(jiǎn)要的探索了CTS的基本知識和幾個(gè)關(guān)系,我們將要把筆墨著(zhù)重在對類(lèi)型的深入探索上,近期本系列就以類(lèi)型這一話(huà)題為核心來(lái)了解以下幾個(gè)相關(guān)主題:值類(lèi)型和引用類(lèi)型,裝箱與拆箱,強類(lèi)型等。這些概念和技術(shù)都是.NET基本知識中最重要的內容,我將通過(guò)自己的視角和觀(guān)點(diǎn)來(lái)揭開(kāi)類(lèi)型概念中的重要知識點(diǎn),層層深入、循序漸進(jìn)的打開(kāi)通向.NET更深層次的大門(mén)。

所以,本文是個(gè)鋪墊,下回會(huì )更精彩和期待。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
CLR VIA C#之旅(1):品味細節,CLR的執行模型
C#學(xué)習筆記(一)——軟件構建與.NET平臺
C++/CLI簡(jiǎn)介(什么是C++/CLI) -------C++/CLI 編程系列一 - ...
.Net Framework
什么是CTS、CLS和CLR_爛筆頭
全面認識.NET框架(一)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久