麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

再談對C#的值類型的理解

2023-05-05 19:01:40
字體:
供稿:網(wǎng)友

我們知道在C#中 所有的類型繼承于System.Object根類型,這也就意味著就代碼層面來講,在C#中所有的類型都是Class,即一切都是Class類型,既然全部都是Class類型,那么值類型在哪里呢?我們可以發(fā)現(xiàn)在C#中 System.Int16,System.Int32,System.Boolean...等等這些常用的類型都是Struct 結(jié)構(gòu)類型,那么結(jié)構(gòu)類型是什么,下面我們定義一個結(jié)構(gòu),然后通過IL Disassemble 工具來查看編譯的中間代碼便可以得到結(jié)果.

public struct CustomerStruct
    {
  public string Name{get;set;}
  }

代碼非常簡單,我們就定義一個struct類型,并且包含一個Name屬性.

再談對C#值類型的理解

看到上面這幅圖,看到定義一個struct類型實際上編譯把你所定義的類型繼承了System.ValueType類型,換句話說,在C#中我們經(jīng)常使用的System.Int16,System.Int32,System.Boolean..這些數(shù)值結(jié)構(gòu)類型都是繼承于 System.ValueType類型,而System.ValueType又是繼承于System.Object根類型,即驗證我開始所講到的在C#中 一切類型都是Class。

之所以存在"值類型" 這個概念,其實是因為C#中的某些類型有這特殊的地位(即繼承于System.ValueType的類型),CLR會特殊的對待這些類型,看下面這2行代碼

Int32 a = new System.Int32(10) ;
  CustomerStruct customer = new CustomerStruct() ;

首先為什么對于數(shù)值類型也可以使用 new 來進(jìn)行內(nèi)存分配呢? 上面已經(jīng)講到,因為他們都是Class類型,當(dāng)然可以使用new 來進(jìn)行內(nèi)存分配.

其次,CLR執(zhí)行這樣的代碼的時,CLR 通過反射(有待考察)或者其他途徑來獲知所要請求分配內(nèi)存的類型是否繼承于System.ValueType如果是的話,那么就在棧上進(jìn)行分配,如果不是 的話,那么就是我們所說的引用類型,就在托管堆上分配內(nèi)存以及棧上分配對應(yīng)的引用變量,這些一切都是CLR做的工作.

我們再來看看裝箱操作.

object o = new object();
  Int32 aaa = 100;
  o = aaa; //這里會發(fā)生裝箱操作

我們都知道當(dāng)CLR執(zhí)行到 o = aaa;這條語句時會發(fā)生裝箱操作,為什么會發(fā)生裝箱操作呢?這是因為CLR 知道引用變量o所要引用的類型aaa是繼承于System.ValueType類型的,繼承于System.ValueType的類型都是在棧上分配的, 而其它則是在托管堆上分配的,所以會CLR會弄得aaa的副本弄到托管堆上去,這一切也都是CLR的工作.

由此我們可以得出結(jié)論:

(1)在C#中 就代碼層面上講 所有的類型都是Class類型.

(2)所謂的 "值類型" != 數(shù)值類型,而是所有繼承于System.ValueType 的類型.

(3)"值類型" 得到的語言級別的支持,CLR知道如何對 "值類型" 這樣的Class類型進(jìn)行內(nèi)存分配和處理.

以上是作者對C#中值類型的一個理解,希望與大家探討。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久国产一区二区三区不卡 | 2021国产精品| 精品中文字幕视频 | 欧美日韩在线看片 | 免费观看国产精品视频 | 一级毛片看 | 韩国精品久久久 | 国产精品亚洲综合一区二区三区 | 色中色在线播放 | 久久不射电影网 | 日本视频免费观看 | 久久国产一级 | 国产成人高清在线观看 | 成人在线观看一区二区 | 国产免费小视频在线观看 | 在线成人精品视频 | 99爱视频在线观看 | 免费国产人成网站 | 亚洲午夜精品视频 | 亚洲天堂岛国片 | 可以看逼的视频 | 久久网国产 | 久久99亚洲精品久久99果 | 成人国产综合 | 日韩a毛片免费观看 | 日韩黄色免费在线观看 | 制服丝袜日日夜夜 | 国内精品久久久久影院不卡 | 日本成年免费网站 | 国产精品爱久久久久久久 | 亚洲视频在线免费看 | 欧美www| 亚洲午夜久久久精品一区二区三区 | 91精品国产91久久久久久丝袜 | 久久久日韩av免费观看下载 | 国产精品免费久久久久久 | 精品国产视频一区二区三区 | 久久不雅视频 | 国产成人高清在线观看 | 三级国产三级在线 | 视频一区二区中文字幕 |