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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#每天進(jìn)步一點(diǎn)--引用類型和值類型

2019-11-17 03:15:00
字體:
供稿:網(wǎng)友

C#每天進(jìn)步一點(diǎn)--引用類型和值類型

  在剛參加工作面試時(shí),我們經(jīng)常會(huì)遇到有關(guān)值類型和引用類型的問題,你回答的怎么樣直接影響你在別人心目中的印象,你回答的不好說明你對(duì)C#沒有深入的了解學(xué)習(xí),今天我?guī)Т蠹一仡櫹翪#中的引用類型和值類型。

CLR支持兩種類型:引用類型和值類型。雖然FCL中大多數(shù)類型都是引用類型但程序中用的最多的還是值類型。引用類型總是從托管堆上分配的,C#的new操作會(huì)返回對(duì)象的內(nèi)存地址--也就是指向?qū)ο蟮臄?shù)據(jù)的內(nèi)存地址。

設(shè)想假設(shè)每次使用一個(gè)Int32值時(shí),都進(jìn)行一次內(nèi)存分配,性能會(huì)受到多大的影響,為了提升簡(jiǎn)單、常用的類型的性能,CLR提供了名為“值類型”的輕量級(jí)類型。值類型的實(shí)例一般在線程棧上分配。在代表值類型實(shí)例的一個(gè)變量中,并不包含一個(gè)指向?qū)嵗闹羔槨O喾矗兞恐邪藢?shí)例本身的字段。值類型的實(shí)例不受垃圾回收器的控制。因此,值類型的使用緩解了托管堆中的壓力,并減少了一個(gè)應(yīng)用程序在其生命周期需要進(jìn)行的垃圾回收次數(shù)。

.net framework SDK文檔清楚地指出哪些類型是引用類型,哪些是值類型。任何稱為“類”的類型都是引用類型,例如,System.Exception 類、System.IO.FileStream 類以及System.Random類都是引用類型。相反文檔將所有的值類型稱為結(jié)構(gòu)或枚舉。例如, System.In32結(jié)構(gòu)、System.Boolean結(jié)構(gòu)、System.Decimal結(jié)構(gòu)、System.DayOfWeek枚舉以及System.Drawing.FontStyle枚舉都是值類型。

  所有的結(jié)構(gòu)都是抽象類型System.ValueType的直接派生類。System.ValueType本身又是System.Object派生的,所有的值類型都必須從System.ValueType派生。所有的枚舉都是從System.Enum抽象類型派生,后者又是從System.ValueType派生的。

以下代碼演示了引用類型和值類型。

//引用類型(由于使用了‘Class’)class SomeRef{public Int32 x;}//值類型(由于使用了‘Struct’)struct SomeVal{public Int32 x;}static void ValueTypeDemo(){   SomeRef r1 = new SomeRef();   //在堆上分配   SomeVal v1 = new SomeVal(); //在棧上分配   r1.x = 5;                                  //提領(lǐng)指針   v1.x = 5;                                 //在棧上修改   Console.WriteLine(r1.x);         //顯示“5”   Console.WriteLine(v1.x);        //同樣顯示“5”   SomeRef r2 = r1;                   //只復(fù)制引用(指針)   SomeVal v2 = v1;                  //在棧上分配并復(fù)制成員   r1.x = 8;                                //r1.x和r2.x都會(huì)更改   v1.x = 9;                               //v1.x會(huì)更改,但v2.x不變   Console.WriteLine(r1.x);         //顯示“8”   Console.WriteLine(r2.x);         //顯示“8”   Console.WriteLine(v1.x);         //顯示“9”   Console.WriteLine(v2.x);          //顯示“5”   }

  先就說這么多了,希望對(duì)大家有所幫助,和大家一起進(jìn)步。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桂阳县| 辰溪县| 潼关县| 建水县| 固安县| 乐昌市| 穆棱市| 雅安市| 读书| 精河县| 桃园县| 金川县| 天全县| 布拖县| 怀宁县| 嘉义市| 光泽县| 永年县| 望谟县| 西城区| 封开县| 嘉荫县| 富宁县| 盐津县| 远安县| 峨边| 若尔盖县| 金山区| 海安县| 常熟市| 左权县| 土默特左旗| 巴东县| 渭南市| 霍山县| 西乌| 湖北省| 巧家县| 江北区| 长顺县| 新丰县|