国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

CTS類型系統(tǒng)

2019-11-10 18:41:36
字體:
來源:轉載
供稿:網友

CTS通用類型系統(tǒng),是.Net中一套定義類型的規(guī)則。我們要掌握c#開發(fā),首先要建立這個類型概念,只有知道c#的元素是什么類型,才能進行相關的分析和選材。

一、值類型和引用類型

C#分兩個大類,一類是引用類型;另一類是值類型。

引用類型從技術上來講,就是一個指針,指向具體的數據;而值類型實際就存放數據。因此引用類型大小都是固定的(雖然它實際關聯其他部分,但是你傳遞引用類型不需要傳遞這些,只需要傳遞指針),而值類型有不同的大小。

所有類型都從System.Object派生,包括值類型分支。所有值類型都是System.ValueType的子類,或者是枚舉System.Enum的子類。而System.ValueType 和System.Enum自身卻是引用類型。因此繼承關系和是否是值類型無關,用戶需要通過class ,struct等關鍵字去定義不同的類型。

用戶自定義的類、接口、數組、委托是引用類型;自定義的枚舉、結構是值類型。

結構和類的區(qū)別是,結構的基類型不能自定義,固定是System.ValueType,也就是結構設計上,不能建立多層的繼承模式。不過結構可以實現接口。

值類型轉換到引用類型時,如轉化成基類型Object會產生“裝箱”操作,從技術上講,就是將數據復制到新的內存空間,然后用指針指向它,因此是一個耗費資源的操作。對應的”取消裝箱”是個相反的過程。

二、特殊類型

泛型不是一種類型,而是一種定義類型的快捷方式。先用占位符作為類型定義的一部分,在實際定義類型的時候給出對應的部分,形成真實的類型。如class C<T>{} 的C并不是類型,而是未完成的模版,需要給定T 的實際類型,才能得到完整的類型 如: C<int> 這里就定義了一個C<int>類型。泛型可以用來定義引用類型也可以用來定義值類型。

匿名類型是用new {成員a;成員b;} 格式定義的類型,直接繼承自Object,成員具有只讀性。該類型主要用來處理臨時的數據對象。

可null類型,在值類型后增加?表示可null類型。可null類型是System.Nullable<T>泛型結構的實例。主要用在數據庫編程。

三、委托類型和接口類型

委托類型從System.Delegate 或 System.MulticastDelegate 派生,屬于引用類型。委托類型通過關鍵字delegate創(chuàng)建,委托類型特殊性在于它主要是用來封裝函數的,而結構和類用來封裝數據和操作,其中結構偏向數據,而類偏向操作。可見這三種自定義類型,有各自的重點。

委托相當于函數指針,它自身不保存實際的運算過程,而是保持指向函數的指針。這有點類似引用類型的數據關系。可以用函數名初始化委托,也可以創(chuàng)建“匿名方法”或lambda算式實例化委托。

匿名方法通過 delegate{ 語句} 創(chuàng)建,是一種在函數內創(chuàng)建的閉包。所謂閉包是一段代碼,但是可以包含宿主函數的局部變量。

lambda 是匿名方法的改進,如 (x,y)=>x+y 可以簡潔的描述簡單算法。

委托類型和接口類型的共同點是不涉及具體的實現,而關注“形態(tài)”,因此都可以做到分離具體實現的目的。其中接口比委托要強大的地方是接口可以定義多個函數形態(tài),而委托只是一個,不過這可能是優(yōu)勢也可能是劣勢,比如你可以定義多個委托,鏈接不同的實例;而用接口的多個函數形態(tài)卻只能一個實例去實現。

因此,要聯通組件,有兩個選擇:一、對于選擇不同算法實現,或者事件通知,用委托最好;二、對于一組關聯的操作,對象互操作,用接口最好。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丘北县| 剑川县| 泰宁县| 峡江县| 浮梁县| 石家庄市| 黄冈市| 莱芜市| 闽侯县| 图木舒克市| 彩票| 台湾省| 信阳市| 兴和县| 湟中县| 天门市| 瓦房店市| 西吉县| 抚顺县| 嘉定区| 布拖县| 镇巴县| 通河县| 桂林市| 弋阳县| 民丰县| 会理县| 从化市| 石首市| 贵定县| 安陆市| 基隆市| 东阳市| 油尖旺区| 汪清县| 库伦旗| 永善县| 竹山县| 大庆市| 赤峰市| 新巴尔虎左旗|