第一章 C# 類(lèi)型基礎(chǔ)--->1.1 值類(lèi)型和引用類(lèi)型

1.1 值類(lèi)型和引用類(lèi)型

??C# 中的類(lèi)型一共分為兩類(lèi),一類(lèi)是值類(lèi)型(Value Type)赫冬,一類(lèi)是引用類(lèi)型(Reference Type)承冰。值類(lèi)型包括了結(jié)構(gòu)和枚舉休偶,引用類(lèi)型則包括了類(lèi)、接口暗挑、委托等笋除。還有一種特殊的值類(lèi)型,稱(chēng)為簡(jiǎn)單類(lèi)型(Simple Type)炸裆,比如 byte垃它,int 等,這些簡(jiǎn)單類(lèi)型實(shí)際上是 BCL 基類(lèi)庫(kù)類(lèi)型的別名烹看。比如国拇,聲明一個(gè) int 類(lèi)型,實(shí)際上是聲明一個(gè) System.Int32 結(jié)構(gòu)類(lèi)型惯殊。
??所有的值類(lèi)型都隱式地繼承自 System.ValueType 類(lèi)型(注意 System.ValueType 本身是一個(gè)類(lèi)類(lèi)型)酱吝。之所以說(shuō)是“隱式地”,是因?yàn)樵?C# 代碼中土思,是看不到這個(gè)繼承關(guān)系的务热,這個(gè)關(guān)系只有通過(guò) MSIL 代碼才可以看到。System.ValueType 類(lèi)型和所有的引用類(lèi)型都繼承自System.Object 基類(lèi)浪漠。

說(shuō)明:

??棧(stack)是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)陕习,在內(nèi)存中霎褐,變量會(huì)被分配在棧上來(lái)進(jìn)行操作址愿。堆(heap)是用于為引用類(lèi)型的實(shí)例(對(duì)象)分配空間的內(nèi)存區(qū)域,在堆上創(chuàng)建一個(gè)對(duì)象冻璃,會(huì)將對(duì)象的地址傳給棧上的變量(反過(guò)來(lái)叫變量指向此對(duì)象,或者變量引用此對(duì)象)省艳。

1.1.1 值類(lèi)型

??當(dāng)聲明一個(gè)值類(lèi)型的變量(Variable)的時(shí)候,變量本身包含了值類(lèi)型的全部字段赖晶,該變量會(huì)被分配在線程堆棧(Thread Stack)上遏插。

1.1.2 引用類(lèi)型

??當(dāng)聲明一個(gè)引用類(lèi)型變量纠修,并使用 new 操作符創(chuàng)建引用類(lèi)型實(shí)例的時(shí)候,該引用類(lèi)型的變量會(huì)被分配到線程棧上了牛,變量保存了位于堆上的引用類(lèi)型的實(shí)例的內(nèi)存地址。變量本身不包含任何類(lèi)型所定義的數(shù)據(jù)鹰祸。

1.1.3 簡(jiǎn)單類(lèi)型

??當(dāng)使用“==”對(duì)引用類(lèi)型變量進(jìn)行比較的時(shí)候,比較的 是它們是否指向堆上同一個(gè)對(duì)象蕴坪。敬锐,對(duì)于string類(lèi)型台夺,對(duì)它們的比較實(shí)際上比較的是值,而不是引用(string是 一種特殊的引用類(lèi)型梳星,它的特殊性在于它是不可變類(lèi)型)
舉個(gè)例子:

string a = "123456"; string b = "123456"; if(a == b) Console.WriteLine("a Equals to b");
1.1.4 裝箱和拆箱
簡(jiǎn)單來(lái)說(shuō)滚朵,裝箱就是將一個(gè)值類(lèi)型轉(zhuǎn)換成等價(jià)的引用類(lèi)型。它的過(guò)程分為這樣幾步:

1)在堆上為新生成的對(duì)象實(shí)例分配內(nèi)存韵吨。該對(duì)象實(shí)例包含數(shù)據(jù)归粉,但它沒(méi)有名稱(chēng)漏峰。
2)將棧上值類(lèi)型變量的值復(fù)制到堆上的對(duì)象中。
3)將堆上創(chuàng)建的對(duì)象的地址返回給引用類(lèi)型變量倔喂。
舉個(gè)例子:

int i = 1; Object boxed = i; Console.WriteLine("Boxed Point: " + boxed);
而拆箱則是將一個(gè)已裝箱的引用類(lèi)型轉(zhuǎn)換為值類(lèi)型:

需要注意的是:拆箱操作需要顯示聲明拆箱后轉(zhuǎn)換的類(lèi)型席噩。它分為兩步來(lái)完成:
1)獲取已裝箱的對(duì)象的地址顾复。
2)將值從堆上的對(duì)象中復(fù)制到堆棧上的值變量中。
舉個(gè)例子

int i = 1; Object boxed = i; int j; j = (int)boxed;     // 顯示聲明拆箱后的類(lèi)型 
Console.WriteLine("UnBoxed Point: " + j);
可見(jiàn)萧芙,裝箱和拆箱需要反復(fù)在堆上進(jìn)行操作,因此动羽,在程序中應(yīng)該盡量避免無(wú)意義的裝 箱和拆箱渔期。

聯(lián)系方式

個(gè)人微信

公眾號(hào)_DotNet微說(shuō).jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拘哨,一起剝皮案震驚了整個(gè)濱河市倦青,隨后出現(xiàn)的幾起案子产镐,更是在濱河造成了極大的恐慌,老刑警劉巖癣亚,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件述雾,死亡現(xiàn)場(chǎng)離奇詭異蓬豁,居然都是意外死亡地粪,警方通過(guò)查閱死者的電腦和手機(jī)蟆技,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)斗忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人眶蕉,你說(shuō)我怎么就攤上這事唧躲〖盍В” “怎么了嵌器?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵爽航,是天一觀的道長(zhǎng)乾忱。 經(jīng)常有香客問(wèn)我窄瘟,道長(zhǎng),這世上最難降的妖魔是什么纲酗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任觅赊,我火速辦了婚禮吮螺,結(jié)果婚禮上帕翻,老公的妹妹穿的比我還像新娘。我一直安慰自己紫岩,他們只是感情好泉蝌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布勋陪。 她就那樣靜靜地躺著硫兰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪违孝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天腮郊,我揣著相機(jī)與錄音轧飞,去河邊找鬼撒踪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掸绞,可吹牛的內(nèi)容都是我干的衔掸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼磷斧!你這毒婦竟也來(lái)了弛饭?” 一聲冷哼從身側(cè)響起侣颂,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤横蜒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斗幼,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澎蛛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜕窿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谋逻。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呆馁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毁兆,到底是詐尸還是另有隱情浙滤,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布气堕,位于F島的核電站纺腊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茎芭。R本人自食惡果不足惜揖膜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壹粟。 院中可真熱鬧,春花似錦雀费、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酌毡。三九已至,卻和暖如春旭蠕,著一層夾襖步出監(jiān)牢的瞬間佑稠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工这刷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留似袁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓啼县,卻偏偏與公主長(zhǎng)得像季眷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挺峡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,090評(píng)論 1 32
  • 《CLR via C#》作者Jeffrey Richter的話來(lái)說(shuō)鲤嫡,“不理解【引用類(lèi)型】和【值類(lèi)型】區(qū)別的程序員將...
    LH_晴閱讀 1,710評(píng)論 0 3
  • 【打卡】 青蛙打卡诫肠,非常好挤安,雖然青蛙安排還是不合理,但畢竟開(kāi)始做了围肥,葉老師說(shuō)過(guò):先完成杠步,再完美朵锣! 檢視自己的青蛙,...
    易學(xué)曉帆閱讀 133評(píng)論 0 0
  • https://www.cnblogs.com/memoryXudy/p/7681991.html spring-...
    是我拉叔閱讀 1,445評(píng)論 0 0
  • 法務(wù)元帥是一個(gè)古老的西境頭銜,由歷代的凱巖王以及凱巖公爵授予他的重臣。法務(wù)元帥一般是在西境領(lǐng)地內(nèi)發(fā)生了較大規(guī)模的叛...
    TheFangless閱讀 347評(píng)論 0 0