• 数据类型解读


     C#数据类型可以分值类型和引用类型。值类型,先说说一个概念 c#栈和堆.

    一,栈和堆.

    堆:在c里面叫堆,在c#里面其实叫托管堆。为什么叫托管堆,我们往下看。

    栈:就是堆栈,因为和堆一起叫着别扭,就简称栈了。后进先出

    托管堆不同于堆,它是由CLR(公共语言运行库(Common Language Runtime))管理,当堆中满了之后,会自动清理堆中的垃圾。所以,做为.net开发,我们不需要关心内存释放的问题。

    数据结构堆栈:是一种后进先出的数据结构,它是一个概念,栈是一种后进先出的数据结构。而堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除

    内存堆栈:存在内存中的两个存储区(堆区,栈区)。

          栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放

          堆区:存放着引用类型的对象,由CLR释放

          栈空间比较小,但是读取速度快

          堆空间比较大,但是读取速度慢

    二,值类型和引用类型 

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

          

    注意: 但我们使用引用类型赋值时,其实是赋值的引用类型的引用,如果数组是一个值类型的数组,那么数组中直接存储值,如果是一个引用类型的数组(数组中存储的是引用类型),那么数组中存储的是引用(内存地址)

    三 装箱 拆箱

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

     装箱   是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。

    拆箱   是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。

  • 相关阅读:
    openfl使用64位的ndk时,编译报错的问题!
    Haxe是何物?
    jsp中如何判断el表达式中的BigDecimal==0
    如何在springmvc的请求过程中获得地址栏的请求
    【原创】【滑块验证码】
    【原创】【aes加密】
    【原创】【qrcodejs2】生成二维码
    【原创】【ueditor】监听内容
    【原创】【ueditor】内容过多时 菜单控件遮挡页面
    js杂谈
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/10818747.html
Copyright © 2020-2023  润新知