日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始

發布時間:2023/12/10 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [你必须知道的.NET] 第七回:品味类型---从通用类型系统开始 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將介紹以下內容:

  • .NET?基礎架構概念?
  • 類型基礎
  • 通用類型系統
  • CLI、CTS、CLS的關系簡述

?

1.?引言

?

?

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

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

2. 基本概念

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

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

那么我們如何來理解呢?

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

.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

過去,由于各個語言在類型定義方面的不一致,造成跨語言編程實現的難度,基于這一問題,.NET中引入CTS來解決各個編程語言類型不一致的問題,類型機制使得多語言的代碼可以無縫集成。因此CTS也成為.NET跨語言編程的基礎規范,為多語言的互操作提供了便捷之道。可以簡單的說,基于.NET的語言共同使用一個類型系統,這就是CTS。

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

?

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

3. 位置與關系

?

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

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

?

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

可見,這些基本內容相互聯系,以簡單的筆墨來澄清其概念、聯系和功能,顯然還不夠力度。然而在此我們以拋磚引玉的方式來引入對這些知識的探求,目的是給一個入口,從此來進行更深入的探索是每個設計人員的成長的關鍵,就像對FCL的認識,需要實踐,需要時間,需要心思。?

4. 通用規則

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

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

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

5. 結論

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

品味類型,就從CTS開始了。??

?

參考文獻

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

(USA)David Chappell, Understanding .NET

廣而告之

[預告]

簡要的探索了CTS的基本知識和幾個關系,我們將要把筆墨著重在對類型的深入探索上,近期本系列就以類型這一話題為核心來了解以下幾個相關主題:值類型和引用類型,裝箱與拆箱,強類型等。這些概念和技術都是.NET基本知識中最重要的內容,我將通過自己的視角和觀點來揭開類型概念中的重要知識點,層層深入、循序漸進的打開通向.NET更深層次的大門。

所以,本文是個鋪墊,下回會更精彩和期待。??

溫故知新

[開篇有益]

[第一回:恩怨情仇:is和as]

[第二回:對抽象編程:接口和抽象類]

[第三回:歷史糾葛:特性和屬性]

[第四回:后來居上:class和struct]

[第五回:深入淺出關鍵字---把new說透]

[第六回:深入淺出關鍵字---base和this]

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91干 | 日韩片在线 | 亚洲av综合色区无码一区爱av | 日韩成人av在线 | 欧美人与性动交α欧美精品 | 亚洲人妻一区二区三区 | 免费观看黄色网址 | 久久国产黄色片 | 五月激情开心网 | 国产精品成人国产乱 | 免费福利在线观看 | 亚洲乱码一区二区三区在线观看 | 精品人妻av在线 | 欧美视频在线一区 | 久久四虎| 91色拍| 麻豆chinese极品少妇 | 日本不卡一二 | 国产网站精品 | 99蜜桃臀久久久欧美精品网站 | 国产日韩一区二区三免费高清 | 加勒比日韩| 亚洲熟妇丰满大屁股熟妇 | 男人撒尿视频xvideos | 欧美视频第一区 | 亚洲成av人在线观看 | 精品免费一区二区 | 亚洲第一精品在线 | 在线的av | 特高潮videossexhd | 亚洲欧美日韩系列 | 国模无码国产精品视频 | 国产精品久久777777毛茸茸 | 亚洲视频自拍 | 日韩av色 | 欧美在线视频第一页 | 亚洲国产日韩在线一区 | 色综合久久av | 久久久精品麻豆 | 日本a网 | 先锋资源一区二区 | 香蕉视频在线视频 | 小俊大肉大捧一进一出好爽 | 精品国产自 | 91岛国 | 91精品国产综合久久福利软件 | 风流少妇一区二区三区91 | 视频二区在线 | 人妻少妇一区二区三区 | 日本三级视频网站 | 日韩不卡在线 | 亚洲人成免费 | 国产高清在线不卡 | 99精品视频免费 | а√在线中文网新版地址在线 | 日韩三级麻豆 | 亚洲人无码成www久久 | 国产成人无码a区在线观看视频 | 小视频在线免费观看 | 69热在线观看 | 尤物视频官网 | 韩日精品中文字幕 | 天天干,天天操 | 91一二区 | 朝桐光一区二区三区 | 伊人小视频 | 国产一区h| 福利精品视频 | 五月婷视频 | 久久国产人妻一区二区免色戒电影 | 国产精品videossex国产高清 | 欧美毛片基地 | 亚洲视频你懂的 | 国产精品久久久91 | 亚洲精品在线观看网站 | 欧美日韩一二三四 | 亚州欧美在线 | 亚洲人妻一区二区三区 | 少妇久久久久久 | 亚洲国产婷婷 | 亚洲无毛视频 | 日韩欧美高清在线观看 | 色六月婷婷 | 青春草在线视频免费观看 | 天天干天天色天天 | 久久桃花网 | 综合视频在线 | 婷婷亚洲激情 | 亚洲v天堂 | 亚洲女人天堂网 | 在线成人免费 | 欧美黄色性 | 99热久久这里只有精品 | 亚洲国产精品suv | h片免费网站 | 欧美人与性动交g欧美精器 国产在线视频91 | 美女插插视频 | 外国a级片 | 亚洲v欧美 |