日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
理解C#值類型和引用類型

工作許久了,可是對(duì)C#值類型和C#引用類型卻一直無(wú)法很好的理解。這兩天花了不少時(shí)間查找資料,看文章,終于有所收獲,在此將自己理解整理出來,方便日后自己查看,同時(shí)希望對(duì)跟我有一樣困惑的朋友有所幫助。廢話不多說,下面開始說說怎么理解值類型和引用類型!

創(chuàng)新互聯(lián)從2013年創(chuàng)立,公司以網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計(jì)等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶上1000家,涉及國(guó)內(nèi)多個(gè)省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗(yàn)。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計(jì)、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計(jì)、獨(dú)特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。

C#值類型數(shù)據(jù)直接在他自身分配到的內(nèi)存中存儲(chǔ)數(shù)據(jù),而C#引用類型只是包含指向存儲(chǔ)數(shù)據(jù)位置的指針。

那么有哪些類型是C#值類型的呢,我把他們歸納成三類:

基礎(chǔ)數(shù)據(jù)類型(string類型除外):包括整型、浮點(diǎn)型、十進(jìn)制型、布爾型。

整型包括:sbyte、byte、char、short、ushort、int、uint、long、ulong 這九種類型;

浮點(diǎn)型就包括 float 和 double 兩種類型;

十進(jìn)制型就是 decimal ;

布爾型就是 bool 型了。

結(jié)構(gòu)類型:就是 struct 型

枚舉類型:就是 enum 型

引用類型有五種:class、interface、delegate、object、string

上面說的是怎么區(qū)分哪些C#值類型和C#引用類型,而使用上也是有區(qū)別的。所有值類型的數(shù)據(jù)都無(wú)法為null的,聲明后必須賦以初值;引用類型才允許為null。

 
 
 
  1.   int i = 0; 
  2.   //或者 
  3.   int i = new int(); 
  4.   //以上兩種都是可以正確的且是等同的 
  5.   int i = null;//這樣的語(yǔ)句是無(wú)法通過編譯的,因?yàn)閕是值類型的,是不允許為null的 
  6.   class c = null;//這樣則是可以通過編譯的,這里的c是引用類型的,允許為null 

值類型和引用類型在賦值(或者說復(fù)制)的時(shí)候也是有區(qū)別的。值類型數(shù)據(jù)在賦值的時(shí)候是直接復(fù)制值到新的對(duì)象中,而引用類型則只是復(fù)制對(duì)象的引用。例如:

 
 
 
  1.   public class abc 
  2.   { 
  3.   public int Attribute; 
  4.   public abc() 
  5.   { 
  6.   Attribute = 1; 
  7.   } 
  8.   } 
  9.   public static void Main() 
  10.   { 
  11.   int i = 0; 
  12.   int j = i; 
  13.   i = 1; 
  14.   Console.WriteLine("i={0}",i); 
  15.   Console.WriteLine("j={0}",j); 
  16.   //結(jié)果是: 
  17.   //i=1 
  18.   //j=0 
  19.   abc a1 = new abc(); 
  20.   abc a2 = a1; 
  21.   a1.Attribute = 2; 
  22.   Console.WriteLine("a1={0}",a1.Attribute); 
  23.   Console.WriteLine("a2={0}",a2.Attribute); 
  24.   //結(jié)果是: 
  25.   //a1=2 
  26.   //a1=2 
  27.   } 

這個(gè)例子就很好的說明了值類型和引用類型的不同了。

***還有值C#類型要么是分配在堆棧的,要么就是在結(jié)構(gòu)中以內(nèi)聯(lián)方式分配的。C#引用類型是分配在堆的。C#引用類型和C#值類型都是從基類 Object 派生出來的。當(dāng)C#值類型需要充當(dāng)對(duì)象時(shí),就在堆上分配一個(gè)包裝(該包裝能使值類型看上去像引用對(duì)象一樣),并且將該值類型的值復(fù)制給它。該包裝被加上標(biāo)記,以便系統(tǒng)知道它包含一個(gè)值類型。這個(gè)進(jìn)程稱為裝箱,反過來操作就稱為拆箱。裝箱和拆箱能夠使任何類型像對(duì)象一樣進(jìn)行處理。


本文名稱:理解C#值類型和引用類型
本文來源:http://www.dlmjj.cn/article/djehiji.html