zoukankan      html  css  js  c++  java
  • C#之装箱与拆箱

    C#中值类型和和引用类型实质上是同源的,所以不但可以从值类型和引用类型之间进行转换,也可以在值类型和引用类型之间进行转换。,但是两者使用的内存类型不同,使他们的转换变得复杂。

    1.装箱:

      在C#中通常将值类型转换成引用类型叫做装箱。

    C#中值类型装箱为引用类型的过程如下:

    •   在托管堆中创建一个新的对象实例,并分配相应的内存。
    •   将值类型变量值复制到对象实例中。
    •       将对象实例地址压入堆栈中,并指向一个引用类型。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int mm = 50;    //定义值类型变量
                object nn = mm; //将值类型变量装箱到引用型类型汇总
                Console.WriteLine("值为{0},装箱对象为{1}",nn,mm);
    
                mm = 100;       //改变值
                Console.WriteLine("值为{0},装箱对象为{1}", mm, nn);
    
                Console.ReadKey();
            }
        }
    }

    运行结果如下:

    2.拆箱:

      在C#中通常将引用类型转换成值类型叫做拆箱。C#中一个引用类型拆箱成一个值类型的流程如下:

    • 检查该对象的实例是否是某个给定的值类型装箱后的值。
    • 如果是则将值从实例中复制出来。
    • 赋值给值类型变量。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                int mm = 50;
                object nn = mm;
                Console.WriteLine("装箱:值为{0},装箱对象为{1}", mm, nn);
                int zz = (int)nn;//取消装箱=拆箱
                Console.WriteLine("拆箱:装箱对象为{0},值为:{1}",nn , zz);
                Console.ReadKey();
            }
        }
    }
  • 相关阅读:
    Redis集群~StackExchange.redis连接Twemproxy代理服务器
    开源的Android视频播放器
    Servlet 实现文件的上传与下载
    HDU1878 欧拉回路
    C#根据域名查询IP(CMD命令参数输入或者启动程序后再输入查询)
    Windows API获取系统配置文件的配置参数
    Lucene核心--构建Lucene搜索(下篇,理论篇)
    Lucene核心--构建Lucene搜索(上篇,理论篇)
    hdu1397(素数组和成偶数的个数 用 标记法)
    hdu1248
  • 原文地址:https://www.cnblogs.com/blogofwyl/p/4302464.html
Copyright © 2011-2022 走看看