程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .Net中的裝箱和拆箱

.Net中的裝箱和拆箱

編輯:C#入門知識

裝箱(boxing)和拆箱(unboxing)是.NET提出得新概念!
.NET的所有類型都是由基類System.Object繼承過來的,包括最常用的基礎類型:int, byte, short,bool等等,就是說所有的事物都是對象。如果申明這些類型得時候都在堆(HEAP)中分配內存,會造成極低的效率

.NET如何解決這個問題得了?正是通過將類型分成值型(value)和引用型(regerencetype),C#中定義的值類型包括原類型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚舉(enum)、結構(struct),引用類型包括:類、數組、接口、委托、字符串等。
值型就是在棧中分配內存,在申明的同時就初始化,以確保數據不為NULL;
引用型是在堆中分配內存,初始化為null,引用型是需要GARBAGE COLLECTION來回收內存的,值型不用,超出了作用范圍,系統就會自動釋放!
下面就來說裝箱和拆箱的定義!
裝箱就是隱式的將一個值型轉換為引用型對象。比如:
int i=0;
Syste.Object obj=i;
這個過程就是裝箱!就是將i裝箱!
拆箱就是將一個引用型對象轉換成任意值型!比如:
int i=0;
System.Object obj=i;
int j=(int)obj;
這個過程前2句是將i裝箱,後一句是將obj拆箱!
再寫個代碼,看看進行了幾次裝拆箱!
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
其中共發生了3次裝箱和一次拆箱!^_^,看出來了吧?!
第一次是將i裝箱,第2次是輸出的時候將i轉換成string類型,而string類型為引用類型,即又是裝箱,第三次裝箱就是(int)obj的轉換成string類型,裝箱!
拆箱就是(int)obj,將obj拆箱!

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved