• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#装箱与拆箱转换

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、装箱转换(boxing)

  装箱时一种隐式转换,它接受值类型的值,根据这个值在堆上创建一个完整的引用类型类型对象并返回对象引用,简单来说就是将值类型转换为引用类型

  任何值类型ValueType都可以被隐式转换成object类型、System.ValueType或Interface(如果值类型实现了Interface)

int i = 123;
object obj = i;

  装箱的过程中,首先在内存中创建 int 类型对象,然后将 i 的值复制到这个对象,最后将 int 对象的引用返回给 obj

                          

  装箱只是创建副本,在装箱产生之后,该值有原始值类型和引用类型两份副本,彼此相互独立,下面代码可以展示这一特征

using System;

namespace 装箱
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 10;
            object obj = i;
            Console.WriteLine("i = {0}, obj = {1}", i, obj);

            //对i和obj进行不同的赋值
            i = 15;
            obj = 111;
            Console.WriteLine("i = {0}, obj = {1}", i, obj);
            Console.ReadLine();
        }
    }
}

结果:    

  

二、拆箱转换(unboxing)

  拆箱转换时显式转换,是将object类型或Interface类型转换为值类型的过程,拆箱时系统会检测要拆箱的实例,确保他是给定值类型的装箱值后,再把其值赋值到变量

int i = 12;
//对i进行装箱
object obj = i;
//对obj进行拆箱
int j = (int) obj;

  尝试将一个值拆箱为非原始类型时会抛出InvalidCastException异常,因此拆箱时的值类型因和装箱时的值类型一致

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
字符编码-使用c#研究发布时间:2022-07-13
下一篇:
异步socket的线程分配(C#)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap