本文目录一览:
- 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();
}