本文目錄一覽:
- 1、說明C#中的裝箱與拆箱的概念
- 2、c#裝箱拆箱
- 3、C#中的拆箱和裝箱
說明C#中的裝箱與拆箱的概念
所謂裝箱和拆箱是一個很抽象的概念
裝箱是將值類型轉換為引用類型
拆箱是將引用類型轉換為值類型
利用裝箱和拆箱功能,可通過允許值類型的任何值與Object 類型的值相互轉換,將值類型與引用類型鏈接起來
例如:
int val = 100;
object obj = val;
Console.WriteLine (「對象的值 = {0}”, obj);
這是一個裝箱的過程,是將值類型轉換為引用類型的過程
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine (“num: {0}”, num);
這是一個拆箱的過程,是將值類型轉換為引用類型,再由引用類型轉換為值類型的過程
PS:被裝過箱的對象才能被拆箱
c#裝箱拆箱
OK,算你厲害,我之所以那麼講只是我不想把MSDN上的定義搬出來罷了:
說我不懂什麼是裝箱拆箱么,那就看看MSDN是怎麼講的吧:
裝箱用於在垃圾回收堆中存儲值類型。裝箱是值類型到 object 類型或到此值類型所實現的任何介面類型的隱式轉換。對值類型裝箱會在堆中分配一個對象實例,並將該值複製到新的對象中。
取消裝箱(拆箱)是從 object 類型到值類型或從介面類型到實現該介面的值類型的顯式轉換。取消裝箱操作包括:
檢查對象實例,以確保它是給定值類型的裝箱值。
將該值從實例複製到值類型變數中。
學習過計算機組成原理,學習過低級語言(彙編,C語言)的人,一看就知道其中的道理,問題是如果不知道程序內存分配的人呢,樓上的這麼厲害,是不是給大家講講什麼是堆,什麼是棧,什麼是堆棧呢?
C#中的拆箱和裝箱
裝箱 是值類型到 object 類型或到此值類型所實現的任何介面類型的隱式轉換。對值類型裝箱會在堆中分配一
個對象實例,並將該值複製到新的對象中。
拆箱 是從 object 類型到值類型或從介面類型到實現該介面的值類型的顯式轉換。
比如:裝箱時,變為引用對象,會多出一個方法表指針,這會有何用處呢? 通過示例來進一步探討。
例子:
Struct A : ICloneable
{
public Int32 x;
public override String ToString()
{
return String.Format(」{0}」,x);
}
public object Clone()
{
return MemberwiseClone();
}
}
static void main()
{
A a;
a.x = 100;
Console.WriteLine(a.ToString());
Console.WriteLine(a.GetType());
A a2 = (A)a.Clone();
ICloneable c = a2; Ojbect o = c.Clone();
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246864.html