亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

輕松學習C#的裝箱與拆箱

2020-01-24 01:22:30
字體:
來源:轉載
供稿:網友

首先看一看什么是裝箱和拆箱?
       簡單的來說:
       裝箱就是值類型轉換為引用類型;
       拆箱就是引用類型轉換為值類型。
       值類型,包括原類型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚舉 (enum) 、結構 (struct)。
       引用類型包括類、數組、接口、委托、字符串等。

裝箱:值類型到引用類型或到此值類型所實現的任何接口類型的隱式轉換
       例如: int temp = 3;
                System.Object obj = temp;
       其中,temp為值類型,在棧中分配;當分配obj這個引用類型時,我們需要在堆中分配一個obj對象,然后把temp值賦給它,這么一系列的過程就是裝箱的過程。

拆箱:從引用類型到任意值類型的顯式轉換。與裝箱不同,拆箱式顯示轉換。
       例如:int temp = 3;
                 System.Object obj = temp;
                  int i = (int) obj;
       拆箱過程中,首先來確定對象obj為一個值類型的裝箱值,然后把值賦給值類型。
隱式轉換總會成功的情況,不會拋出異常:
  (1)、從派生類到基類;
  (2)、從派生接口到基接口;
  (3)、從類到接口(該類實現了接口);
  (4)、從Null到任何類;
顯式引用轉換,以下可能拋出異常,轉換不一定成功:
  (1)、從基類到派生類;
  (2)、從接口到接口(基接口到派生接口或者倆接口沒有關系);
  (3)、從接口到類(該類實現了該接口或該類未封閉);
  (4)、從類到接口(該類未實現該接口且該類未封閉);

上面簡單的介紹了拆箱和裝箱的定義,下面就來討論一下裝箱和拆箱與堆和棧怎樣使用
       其中值類型是在棧中分配內存,本身的聲明就是一個初始化的過程,其不需要進行垃圾回收,只要超出所定義的作用范圍會自動釋放內存,而引用類型則是在堆中分配的,和java一樣,在堆種分配內存,而其托管堆進行垃圾回收。當兩種數據類型進行轉換時就引出了裝箱/拆箱。
比較裝箱和拆箱的優缺點
       裝箱和拆箱雖然滿足了兩只類型之間的轉換。但是從裝箱的過程中不難看出,每次裝箱時要在堆中new一個新的對象,當量特別大是肯定會大大影響程序的效率。事物總有兩面性,every sword has two sides,事情便簡單了,性能也下來了。所以,在應用中,我們應該盡量避免裝箱操作。
       了解了裝箱和拆箱的操作,我們可以清楚的明白:裝箱操作會導致數據在堆和棧上進行拷貝,頻繁的裝箱操作會性能損失。而相比而言拆箱過程對性能損耗還是比較小的。
裝箱和拆箱的詳細步驟

       1、裝箱(box)的詳細步驟:

      (1)、在堆上分配一個內存空間,大小等于需要裝箱的值類型對象的大小加上兩個引用類型對象都擁有的成員:類型對象指針和同步塊引用。
      (2)、把堆棧上的值類型對象復制到堆上新分配的對象。
      (3)、返回一個指向堆上新對象的引用,并且存儲到堆棧上被裝箱的那個值類型的對象里。
        這個步驟不需要程序員自己編寫,在任何出現裝箱的地方,編譯器會自動加上執行以上功能的IL代碼。
        所謂的拆箱就是裝箱對應著的概念,但拆箱的過程和裝箱并不是倒過來就是:
       2、拆箱(unbox.any)的詳細步驟
        如果為待拆箱對象為null,拋出NullReferenceException異常。
        如果引用指向的不是一個期望對象的已裝箱對象,拋出InvalidCastException異常。
      (1)、獲取已裝箱對象中各個字段的地址,這個過程就是“拆箱”
       需要說明的是一般拆箱以后會伴隨著對象的拷貝,但拷貝操作已經不是拆箱的范疇。

下面舉兩個小的例子來實現什么是裝箱、拆箱以及怎樣避免因頻繁的裝箱而耗費內存
(1)、裝箱:   

 using System;    public class Test    {          public static void Main(String[] args)         {             int i = 10;             //將值類型的i裝箱             //需要注意的是:這里的裝箱采用的是值的拷貝             object obj = i;             //檢驗是否裝箱成功了             if(obj is int)             {                Console.WriteLine("數據已經裝箱!");             }             //我們在這里更改i的值             i = 33;             Console.WriteLine("int i現在的值是:{0}",i);            Console.WriteLine("int i裝箱的值是:{0}",obj);        }     }

(2)、拆箱:

 int i = 10;     object obj = i;     int j = (int)obj;      (3)、避免頻繁的裝箱:     int i = 10;     int j = 20;     int s = 30;     Console.WriteLine("i的值為{0},j的值為{1},s的值為{2}", i.ToString(), j.ToString(), s.ToString());

以上就是介紹了C#的裝箱與拆箱,思路很清晰,涉及的內容很全面,包括裝箱和拆箱的優缺點、裝箱和拆箱的步驟等,很適合初學者進行學習。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产香蕉精品视频一区二区三区| 日韩中文字幕不卡视频| 欧美国产精品人人做人人爱| 久久久久久国产精品久久| 亚洲欧美日韩爽爽影院| 亚洲人线精品午夜| 欧美与欧洲交xxxx免费观看| 在线观看欧美视频| 97超级碰碰人国产在线观看| 亚洲第一视频网| 国内精品国产三级国产在线专| 97在线看免费观看视频在线观看| 精品国产精品三级精品av网址| 91影院在线免费观看视频| 亚洲国产精品久久久久秋霞不卡| 日韩欧美在线国产| 在线视频日本亚洲性| 97国产真实伦对白精彩视频8| 日韩女优人人人人射在线视频| 91精品啪aⅴ在线观看国产| 欧美日韩在线视频观看| 精品久久中文字幕久久av| 精品久久久久久中文字幕| 国产精品视频yy9099| www.久久久久久.com| 国产精品白丝jk喷水视频一区| 日韩在线观看免费av| 91免费看片网站| 久久男人av资源网站| 操人视频在线观看欧美| 久久影院资源网| 91啪国产在线| 奇米成人av国产一区二区三区| 亚洲欧美三级在线| 亚洲精品成人网| 欧美精品激情在线观看| 91成人天堂久久成人| 亚洲国产成人在线播放| 欧美激情精品久久久久久黑人| 91成人免费观看网站| 91久久国产综合久久91精品网站| 国产成人午夜视频网址| 98精品在线视频| 91久热免费在线视频| 久久亚洲综合国产精品99麻豆精品福利| 欧美精品情趣视频| 在线国产精品播放| 欧美日韩在线免费| 色噜噜狠狠狠综合曰曰曰| 精品人伦一区二区三区蜜桃网站| 亚洲午夜精品视频| 正在播放国产一区| 精品久久久久久久久久久久久| 91精品在线国产| 欧美激情一级精品国产| 色先锋资源久久综合5566| 韩国一区二区电影| 久久精品国产视频| 成人免费观看49www在线观看| 国产一区私人高清影院| 欧美性生交xxxxxdddd| 国产精品福利网| 国产成人福利视频| 亚洲国产精品999| 国模gogo一区二区大胆私拍| 亚洲国产欧美在线成人app| 久久露脸国产精品| 国产在线精品成人一区二区三区| 欧美成人精品h版在线观看| 欧美精品九九久久| 精品精品国产国产自在线| 精品精品国产国产自在线| 91天堂在线视频| 亚洲成人精品视频在线观看| 国产精品私拍pans大尺度在线| 国产精品嫩草影院久久久| 亚洲精品国偷自产在线99热| 91国内精品久久| 久热国产精品视频| 久久久久久久久久久免费| 亚洲精品国产成人| 欧美日韩亚洲成人| 日韩免费视频在线观看| 欧美巨大黑人极品精男| 日韩精品视频免费| 日韩中文字幕国产| 午夜精品在线视频| 日韩精品极品在线观看播放免费视频| 国产精品久久久久久久久久久久久久| 成人日韩在线电影| 国内免费精品永久在线视频| 久久在线观看视频| 国内伊人久久久久久网站视频| 69av在线播放| 亚洲国产天堂久久综合网| 97精品欧美一区二区三区| 日韩欧美国产成人| 国产精品视频永久免费播放| 欧美精品www| 久久久精品一区二区三区| 日韩综合中文字幕| 亚洲乱码一区二区| 国产精品a久久久久久| 国产成人精品一区二区在线| 亚洲一区二区三区四区在线播放| 日韩精品中文在线观看| 91视频国产高清| xvideos亚洲| 日本sm极度另类视频| 亚洲a级在线观看| 欧美国产日韩视频| 欧美日韩中国免费专区在线看| 国产成人一区二区三区| 福利视频一区二区| 国产精品一区二区性色av| 日韩大片免费观看视频播放| 国产精品成人在线| 国产原创欧美精品| yellow中文字幕久久| 成人精品视频99在线观看免费| 国产精品永久在线| 欧美成人在线影院| 欧美高清无遮挡| 国产丝袜一区二区三区免费视频| 久久精品亚洲热| 国外成人在线视频| 欧美视频专区一二在线观看| 久久精品2019中文字幕| 欧美超级乱淫片喷水| 久久影视电视剧免费网站| 欧美乱大交xxxxx另类电影| 日韩成人在线视频观看| 成人亚洲欧美一区二区三区| 日韩精品中文字幕在线| 久久久精品一区二区| 欧洲s码亚洲m码精品一区| 日韩毛片在线看| 欧美激情亚洲综合一区| 欧美最近摘花xxxx摘花| 国产精品嫩草影院一区二区| 国产精品久久久久aaaa九色| 在线视频日本亚洲性| 成人在线小视频| 精品久久久一区| 久久av中文字幕| 在线观看久久久久久| 日韩国产在线播放| 91tv亚洲精品香蕉国产一区7ujn| 亚洲精品成人免费| 日韩av在线导航| 亚洲精品wwwww| 欧美wwwwww| 欧美成aaa人片在线观看蜜臀| 亚洲午夜久久久久久久| 欧美乱大交做爰xxxⅹ性3| 亚洲成人黄色在线| 国a精品视频大全| 国产一区二区三区高清在线观看| 欧美精品18videos性欧美| 欧美日韩性视频在线| 国外日韩电影在线观看| 欧美洲成人男女午夜视频| 亚洲精品福利免费在线观看| 精品中文字幕在线|