欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c#:CTS類型系統(tǒng)

 更新時(shí)間:2012年12月03日 16:53:06   作者:  
CTS通用類型系統(tǒng),是.Net中一套定義類型的規(guī)則。我們要掌握c#開發(fā),首先要建立這個(gè)類型概念,只有知道c#的元素是什么類型,才能進(jìn)行相關(guān)的分析和選材。

一、值類型和引用類型

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

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

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

用戶自定義的類、接口、數(shù)組、委托是引用類型;自定義的枚舉、結(jié)構(gòu)是值類型。

結(jié)構(gòu)和類的區(qū)別是,結(jié)構(gòu)的基類型不能自定義,固定是System.ValueType,也就是結(jié)構(gòu)設(shè)計(jì)上,不能建立多層的繼承模式。不過結(jié)構(gòu)可以實(shí)現(xiàn)接口。

值類型轉(zhuǎn)換到引用類型時(shí),如轉(zhuǎn)化成基類型Object會(huì)產(chǎn)生“裝箱”操作,從技術(shù)上講,就是將數(shù)據(jù)復(fù)制到新的內(nèi)存空間,然后用指針指向它,因此是一個(gè)耗費(fèi)資源的操作。對(duì)應(yīng)的”取消裝箱”是個(gè)相反的過程。

二、特殊類型

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

匿名類型是用new {成員a;成員b;} 格式定義的類型,直接繼承自O(shè)bject,成員具有只讀性。該類型主要用來處理臨時(shí)的數(shù)據(jù)對(duì)象。

可null類型,在值類型后增加?表示可null類型??蒼ull類型是System.Nullable<T>泛型結(jié)構(gòu)的實(shí)例。主要用在數(shù)據(jù)庫編程。

三、委托類型和接口類型

委托類型從System.Delegate 或 System.MulticastDelegate 派生,屬于引用類型。委托類型通過關(guān)鍵字delegate創(chuàng)建,委托類型特殊性在于它主要是用來封裝函數(shù)的,而結(jié)構(gòu)和類用來封裝數(shù)據(jù)和操作,其中結(jié)構(gòu)偏向數(shù)據(jù),而類偏向操作??梢娺@三種自定義類型,有各自的重點(diǎn)。

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

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

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

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

因此,要聯(lián)通組件,有兩個(gè)選擇:一、對(duì)于選擇不同算法實(shí)現(xiàn),或者事件通知,用委托最好;二、對(duì)于一組關(guān)聯(lián)的操作,對(duì)象互操作,用接口最好。

相關(guān)文章

  • C# Guid.NewGuid獲得隨機(jī)數(shù)

    C# Guid.NewGuid獲得隨機(jī)數(shù)

    根據(jù)GUID獲得種子,然后獲得隨機(jī)數(shù),這個(gè)是完全隨機(jī)的
    2013-04-04
  • C#對(duì)稱加密與非對(duì)稱加密實(shí)例

    C#對(duì)稱加密與非對(duì)稱加密實(shí)例

    這篇文章主要介紹了C#對(duì)稱加密與非對(duì)稱加密實(shí)例,詳細(xì)分析了對(duì)稱加密與非對(duì)稱加密的原理與具體實(shí)現(xiàn)方法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#操作目錄與文件的方法步驟

    C#操作目錄與文件的方法步驟

    本篇文章是對(duì)C#操作目錄與文件的方法步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼

    C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C#簡單嵌套flash讀取數(shù)據(jù)的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-11-11
  • C#驗(yàn)證兩個(gè)QQ頭像相似度的示例代碼

    C#驗(yàn)證兩個(gè)QQ頭像相似度的示例代碼

    這篇文章主要介紹了c#驗(yàn)證兩個(gè)QQ頭像相似度,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 基于WPF實(shí)現(xiàn)視頻封面查看器

    基于WPF實(shí)現(xiàn)視頻封面查看器

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)視頻封面查看器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • 聊一聊C#接口問題 新手速來圍觀

    聊一聊C#接口問題 新手速來圍觀

    聊一聊C#接口問題,新手速來圍觀,一個(gè)通俗易懂的例子幫助大家更好的理解C#接口問題,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 簡單的觀察者模式示例分享

    簡單的觀察者模式示例分享

    這篇文章主要介紹了簡單的觀察者模式示例,抽象層定義了觀察者模式,實(shí)現(xiàn)層是對(duì)抽象層的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-03-03
  • 淺析WPF中ToolTip工具提示的應(yīng)用

    淺析WPF中ToolTip工具提示的應(yīng)用

    在日常應(yīng)用中,當(dāng)鼠標(biāo)放置在某些控件上時(shí),都會(huì)有相應(yīng)的信息提示,從軟件易用性上來說,這是一個(gè)非常友好的功能設(shè)計(jì),本文就來和大家簡單聊聊WPF中ToolTip工具提示的相關(guān)使用,有興趣的可以了解下
    2023-12-12
  • Unity性能優(yōu)化Shader函數(shù)ShaderUtil.GetShaderGlobalKeywords用法示例

    Unity性能優(yōu)化Shader函數(shù)ShaderUtil.GetShaderGlobalKeywords用法示例

    這篇文章主要為大家介紹了Unity性能優(yōu)化Shader函數(shù)ShaderUtil.GetShaderGlobalKeywords用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論