知识点

  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. 将该值从实例复制到值类型变量中。

  3. string是引用类型.

  4. 要掌握装箱与拆箱,就必须了解CTS及它的特点。

    NET重要技术和基础之一的CTS(Common Type System)。顾名思义,CTS就是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型分成两大类 ——Value Type 和 Reference Type。。,多数的OO语言存在这个弱点,原因就是因为他们的原类型没有共同的基点,于是他们在本质上并不是真正的对象C++更依赖于对象,而非面向对象。.Net环境的CTS 给我们带来了方便。第一、CTS中的所有东西都是对象;第二、所有的对象都源自一个基类——System.Object类型。这就是所谓的单根层次结构(singly rooted hierarchy)关于System.Object的详细资料请参考微软的技术文档。CTS  Value Type的一个最大的特点是它们不能为null,Value Type的变量总有一个值。在传递Value Type的变量时,实际传递的是变量的值,而非底层对象的“引用”。CTS  Reference Type就好像是类型安全的指针,它可以为null。当值为null时,说明没有引用或类型指向某个对象。声明一个引用类型的变量时,被操作的是此变量的引用(地址),而不是数据。

    使用这种多类型系统时如何有效的拓展和提高系统的性能?就是今天探讨的问题,西雅图人提出了Box and UnBox的想法。简言之,装箱就是将value type转换为reference type;反之,就是拆箱。

    装箱过程:

    第一步将一个值压入堆栈;

    第二步将引用类型转换为值类型;

    第三步间接将值压栈;第四步传值给dubUnBox。

    拆箱过程:

    装箱的逆过程。值得注意以下几点:box time不需要显式的类型转换,在unbox时就必须进行类型转换。因为引用类型的对象可以被转换为任何类型。电脑和人脑一个差别的体现就在于此!哈哈!类型转换不容回避的将会受到来自CTS管理中心的监控——其标准自然是依据规则

C#装箱(Boxing)和拆箱(Unboxing)相关推荐

  1. 什么是装箱(boxing)和拆箱(unboxing)?

    将值类型转换为引用类型的过程称为装箱    反之称为拆箱

  2. Java 进阶——自动装箱和自动拆箱

    1.什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象实例的时候,我们会这样: Class a ...

  3. 自动装箱(autoboxing)和自动拆箱(unboxing)

    自动装箱和自动拆箱 前言 八种基本数据类型对应的包装类 一.自动装箱 二. 自动拆箱 前言 在任何情况下,都不能将对象强制转换成基本数据类型或基本数据类型强制转换为对象.Java中,基本类型和对象是完 ...

  4. java 自动装箱自动拆箱,java自动装箱、自动拆箱和正常情况性能比较

    自动装箱和自动拆箱是java5.0版本引入的,能自动将基本类型转换为对应的基本类型包装对象,那么我们比较一下他们的性能情况. package com.wmmad.test; import junit. ...

  5. java 自动装箱自动拆箱_自动装箱和自动拆箱

    自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基本类型了. 基 ...

  6. 自动装箱与自动拆箱的一些问题

    今天打算复习一下Java基础,之前学的太快速了,现在暑假,好好把那些细节看一下 复习到自动装箱和自动拆箱的时候,这里有个很有趣的现象 Integer n1 = 100; Integer n2 = 10 ...

  7. 第三次学JAVA再学不好就吃翔(part64)--自动装箱和自动拆箱

    学习笔记,仅供参考 自动装箱和自动拆箱 装箱:把基本类型转换为包装类类型 int x = 100; Integer i1 = new Integer(x); 拆箱:把包装类类型转换为基本类型 int ...

  8. 包装类,包装类的自动装箱和自动拆箱

    目标 1)包装类的作用, 2)掌握包装类的自动装箱和自动拆箱操作. 3)掌握包装类的转换操作. 具体内容 一切皆对象,八种基本数据类型不是对象. 把Int包装成一个类,这样的一个类就可以以对象的形式操 ...

  9. 深入理解自动装箱和自动拆箱

    一.什么是自动装箱.自动拆箱 此机制开始于jdk 1.5 java中有8种基本类型,对应8种基本类型有8个包装类. 整形 实型 布尔型 字符型 long/int/short/byte float/do ...

  10. 装箱和拆箱,自动装箱和自动拆箱

    装箱和拆箱,自动装箱和自动拆箱 以Integer的创建为例. 装箱和拆箱 装箱:把基本数据类型转换成包装类对象(int->Integer) Integer num1=new Integer(17 ...

最新文章

  1. 其实大学老师在剑桥读博士,好像录取不难
  2. 如何确保TCP协议传输稳定可靠?
  3. 【年度总结】2016年年度总结
  4. 计算机操作系统(3):操作系统的基本特征
  5. 在线代码编辑器 Codemirror 的轻量级 React 组件
  6. Linux常用的网络命令
  7. 用LM350制作简单可调电源
  8. 使用cachecloud(redis云平台)搭建和监控redis
  9. python与java前景分析-Java和Python哪个未来前景好?
  10. 《孙子兵法》的逻辑结构
  11. 【百问网智能家居---基于单片机最小系统STM32F103C8T6_MINI的入门学习】
  12. IT行业常见英文术语汇总(一)
  13. 这个男人用8幅画刻画“父爱”,被暖化了
  14. Javascript验证码的生成和验证,源代码
  15. Opegnl ES之四边形绘制
  16. iframe父页面与子页面如何传值
  17. 解决:AWVS(Acunetix)激活频繁失效(仅供学习)
  18. 详解Git合并冲突——原因及解决 “Automatic merge failed; fix conflicts and then commit the result.“
  19. 基于STM32的电机--电机概述
  20. 计算机网络实验二 路由器的配置和静态路由

热门文章

  1. 浏览器下载blob文件流(兼容IE浏览器和其他主流浏览器)
  2. 【二次开发教程】Ai-WB2系列的eclipes搭建环境教程
  3. win10怎么显示文件后缀_win10系统中使用win7照片查看器(无需下载安装)
  4. 【Java】9、Java IO 流
  5. [转]中英文停止词表(stopword)
  6. 多模块项目-项目复制出现Module xx must not contain source root xx The root already belongs to module xx
  7. HDU-6148 Valley Numer(数位DP)
  8. php array assoc,PHP array_uintersect_assoc() 函数
  9. 查找代码文件中的非 ASCII 字符
  10. Eclipse设置UTF-8编码格式