偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

理解C#值類(lèi)型和引用類(lèi)型

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

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

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

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

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

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

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

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

布爾型就是 bool 型了。

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

枚舉類(lèi)型:就是 enum 型

引用類(lèi)型有五種:class、interface、delegate、object、string

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

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

值類(lèi)型和引用類(lèi)型在賦值(或者說(shuō)復(fù)制)的時(shí)候也是有區(qū)別的。值類(lèi)型數(shù)據(jù)在賦值的時(shí)候是直接復(fù)制值到新的對(duì)象中,而引用類(lèi)型則只是復(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ō)明了值類(lèi)型和引用類(lèi)型的不同了。

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

2009-08-26 14:05:19

C#值類(lèi)型和引用類(lèi)型

2009-08-27 16:39:26

C# String類(lèi)型

2009-08-31 14:34:46

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

2011-06-08 13:03:52

C#值類(lèi)型引用類(lèi)型

2013-05-23 17:21:16

C#

2009-08-14 17:09:48

C#引用類(lèi)型

2009-10-22 18:41:49

CLR VIA C#教

2009-09-03 16:55:58

C#引用類(lèi)型

2009-08-06 10:14:15

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

2009-09-11 11:09:36

C#引用類(lèi)型

2009-08-03 17:51:43

C#引用類(lèi)型

2009-09-11 11:17:04

C#引用類(lèi)型

2009-10-10 09:53:07

.NET值類(lèi)型

2021-08-27 07:47:06

引用類(lèi)型

2009-08-24 13:52:04

C# 泛型約束

2009-08-03 14:54:23

值類(lèi)型C#

2009-08-25 17:52:01

C#可空值類(lèi)型

2009-08-26 10:34:15

C#類(lèi)型C#變量

2009-08-10 17:25:58

C#匿名類(lèi)型

2009-08-26 15:46:01

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

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