zoukankan      html  css  js  c++  java
  • c#语法复习总结(2)-数据类型

     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 类型到值类型或从接口类型到实现该接口的值类型的显式转换。

            

  • 相关阅读:
    BZOJ3514:GERALD07加强版(LCT,主席树)
    BZOJ2729:[HNOI2012]排队(组合数学)
    BZOJ4517:[SDOI2016]排列计数(组合数学,错排公式)
    BZOJ3123:[SDOI2013]森林(主席树,启发式合并)
    BZOJ3786:星系探索(Splay,括号序)
    BZOJ2212:[POI2011]Tree Rotations(线段树合并)
    BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)
    CF613D:Kingdom and its Cities(树形DP,虚树)
    BZOJ3611:[HEOI2014]大工程(树形DP,虚树)
    BZOJ2286:[SDOI2011]消耗战(树形DP,虚树)
  • 原文地址:https://www.cnblogs.com/zaisheng/p/10817335.html
Copyright © 2011-2022 走看看