zoukankan      html  css  js  c++  java
  • 装箱与拆箱原理

    知识点 

    1. 值类型。
      1. 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。
      2. 值类型超出作用范围系统自动释放内存。
      3. 主要由两类组成:结构,枚举(enum),结构分为以下几类:
        1. 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong)
        2. 浮点型(Float、Double)
        3. decimal
        4. bool
        5. 用户定义的结构(struct)
    2. 引用类型。
      1. 引用类型在堆中分配内存,初始化时默认为null。
      2. 引用类型是通过垃圾回收机制进行回收。
      3. 包括类、接口、委托、数组以及内置引用类型object与string。

    概念

    由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。

    1. 装箱 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 
      •   
    2. 拆箱(取消装箱)是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
      1. 检查对象实例,确保它是给定值类型的一个装箱值。(拆箱后没有转成原类型,编译时不会出错,但运行会出错,所以一定要确保这一点。用GetType().ToString()判断时一定要使用类型全称,如:System.String 而不要用String。)

      2. 将该值从实例复制到值类型变量中。

    示例

    首先写个简单的控制台程序:

    // Tutorial_boxing_unboxing.cs
    // 装箱与拆箱
    using System;
    1. class App
    2. {
    3.     static void Main()
    4.     {
    5.         int i = 32;
    6.         object o = i; //隐式装箱
    7.          Console.WriteLine("o = {0}", o);
    8.         Console.Read();
    9.     }
    10. }

    其中object o = i这里我们进行了装箱操作,然后我们用MSIL 反汇编程序查看下生成的.exe程序的内部机理。

    作者:大胖儿在努力 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HDU1050
    POJ3528移石头
    CodeForces230A
    lca学习题
    rmq的st算法模板题 nyoj 119
    rmq问题和lca可以相互转化
    rmq算法,利用倍增思想
    poj 1274 基础二分最大匹配
    hdu 1520 树形dp入门题
    poj 1466 最大独立集
  • 原文地址:https://www.cnblogs.com/cuijl/p/4493971.html
Copyright © 2011-2022 走看看