自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

理解C#值類型和引用類型

開發(fā) 后端
本文根據(jù)筆者的經(jīng)驗(yàn),講了將如何理解C#值類型和引用類型。

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

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

上面說(shuō)的是怎么區(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ú)法通過(guò)編譯的,因?yàn)閕是值類型的,是不允許為null的   
  6.   class c = null;//這樣則是可以通過(guò)編譯的,這里的c是引用類型的,允許為null  

值類型和引用類型在賦值(或者說(shuō)復(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è)例子就很好的說(shuō)明了值類型和引用類型的不同了。

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

【編輯推薦】

  1. C#事件和委托的編譯代碼
  2. C#事件的由來(lái)
  3. 學(xué)習(xí)C#委托:將方法綁定到委托
  4. 學(xué)習(xí)C#委托:將方法作為方法的參數(shù)
  5. C# 插件構(gòu)架實(shí)例詳解
責(zé)任編輯:book05 來(lái)源: IT專家網(wǎng)
相關(guān)推薦

2009-08-26 14:05:19

C#值類型和引用類型

2009-08-27 16:39:26

C# String類型

2009-08-31 14:34:46

C#值類型C#結(jié)構(gòu)類型

2011-06-08 13:03:52

C#值類型引用類型

2013-05-23 17:21:16

C#

2009-10-22 18:41:49

CLR VIA C#教

2009-08-14 17:09:48

C#引用類型

2009-10-10 09:53:07

.NET值類型

2009-08-06 10:14:15

C#引用類型數(shù)組

2009-09-03 16:55:58

C#引用類型

2009-09-11 11:09:36

C#引用類型

2009-08-03 17:51:43

C#引用類型

2009-09-11 11:17:04

C#引用類型

2021-08-27 07:47:06

引用類型

2009-08-24 13:52:04

C# 泛型約束

2009-08-25 17:52:01

C#可空值類型

2009-08-03 14:54:23

值類型C#

2009-08-26 10:34:15

C#類型C#變量

2009-08-10 17:25:58

C#匿名類型

2009-08-26 15:46:01

C#匿名類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)