`

C#装箱拆箱

    博客分类:
  • C#
阅读更多
C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声明时初始化才能使用,不能为NULL,而引用类型在堆中分配内存,初始化时默认为NULL。值类型超出作用范围系统自动释放内存,而引用类型是通过垃圾回收机制进行回收。由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以相互转换,而这转换过程也就是所谓的装箱和拆箱。
        装箱转换
        装箱就是将一个值型变量隐式地转换为引用类型对象,虽然也可以显示转换,但一般都不需要使用到。对值类型进行装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
例如:

class TestBoxing 
{
    static void Main()
    {
        int i = 123;
        object o = i;  // 隐式装箱       
         i = 456;  // 改变i的内容
         System.Console.WriteLine("值类型的值为 {0}", i);
         System.Console.WriteLine("引用类型的值为 {0}", o);
     }
}结果输出:
值类型的值为 456
引用类型的值为 123

取消装箱
        取消装箱就是从引用类型到值类型的显式转换。取消装箱操作先检查对象实例,确保它是给定值类型的一个装箱值,然后将该值从实例复制到值类型变量中。
例如:

class TestUnboxing
{
    static void Main()
    {
        int i = 123;
        object o = i;  // 隐式装箱
        try
        {
            int j = (short) o;  // 试着取消装箱           
             System.Console.WriteLine("取消装箱成功.");
         }
        catch (System.InvalidCastException e)
        {
             System.Console.WriteLine("{0} 错误: 不正确的取消装箱.", e.Message);
         }
     }
}结果输出:
指定的转换无效。错误:不正确的取消装箱。
要将int j = (short) o 改为int j = (int) o 就会显示取消装箱成功。

   在网上查资料的时候在CSDN上看到个解释装箱和拆箱的解释,如下所示:

//“小范围”变量int,“大范围”变量double  
  int a=10;  
  double b;  
   b=a;  //这叫装箱,“小”的放入“大”的,呵呵  
  int a;  
  double b=10;  
   a=(int)b;  //这叫拆箱,“大”的放入“小”的,乱放或放错了可不行哈,呵呵
能把强制类型转换解释成装箱拆箱实在觉得很有趣,就做个反面的例子吧。
分享到:
评论

相关推荐

    C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展

    C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展。 源代码(工程)

    C#装箱与拆箱1

    C#装箱与拆箱第一部分。是一个很好的视频,帮助大家学习C#装箱和拆箱的知识

    C# 装箱和拆箱的知识回顾

    本篇文章主要介绍了C#的装箱和拆箱的知识点回顾,对大家的学习和复习具有很好的参考价值,需要的朋友一起来看下吧

    C#装箱和拆箱2

    C#装箱和拆箱视频第二部分,可以结合第一部分的视频看。对初学者很有帮助

    深入理解C# 装箱和拆箱(整理篇)

    装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够...

    c#数值类型,转换和装箱拆箱

    c#的数值类型还有装换和重要的装箱和拆箱,以及实例,很不错的哦

    C#中使用ProtoBuf优化百万级数据的存取性能

    1、以20个浮点类型字段,1百万条记录为测试数据 2、分别对比二进制与ProtoBuf序列化、反序列化、显示速度的耗时对比以及占用空间大小对比 3、在增加压缩功能后再进行序列化、反序列化、显示速度的耗时对比以及占用...

    C#实现装箱与拆箱操作简单实例

    本文以一个简单实例讲述了C#装箱和拆箱操作的实现方法,简单来说装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型,是涉及栈和堆的使用方面的东西,学过C#的人应该都知道,所以这里就不哆嗦了,本例代码...

    c#装箱和拆箱知识整理

    1、装箱和拆箱是一个抽象的概念 2、装箱是将值类型转换为引用类型 ; 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来 例如:...

    C#语言中的装箱和拆箱操作

    C#语言中的装箱和拆箱操作,很全面的理解装箱和拆箱操作

    装箱与拆箱(二)

    C#中必备知识点 装箱与拆箱(2)

    C#装箱和拆箱操作实例分析

    本文实例讲述了C#装箱和拆箱操作。分享给大家供大家参考,具体如下: 1. C#中的装箱 C#中的装箱就是把一个值类型隐式地转换为object类型,转换过程中采用的是值的拷贝而不是引用,这从下面的例子可以看出: using ...

    C#装箱和拆箱原理详解

    通过图例主要介绍了C#装箱和拆箱原理,内容很简单,感兴趣的小伙伴们可以参考一下

    C#装箱与拆箱操作的深入讲解

    都知道C#有装箱和拆箱的操作,听闻也都是讲int类型转换成object类型就是装箱,将object类型再转回int类型就是拆箱。 描述的通俗点: 装箱 将值类型转换成引用类型, 拆箱 将引用类型转换成值类型。 那看来是要先...

    36装箱拆箱(1).rar

    讲解C#装箱相关问题,适合C#初学者的学习。

    装箱与拆箱(一)

    C#中重要的,必备知识点

    浅析C# 装箱和拆箱

    主要介绍了C# 装箱和拆箱的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

Global site tag (gtag.js) - Google Analytics