c语言有没有自动拆箱和装箱,c#中什么是装箱和拆箱

发布时间:2023-01-08

本文目录一览:

  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;
    object o = c.Clone();
}