zoukankan      html  css  js  c++  java
  • 02值类型

    分配在栈上、派生于System.ValueType的值类型:
    ● 简单类型,比如int,uint,byte,sbyte,short,long,ulong,char,float,double,decmial,bool都属于值类型。简单类型对应BCL基类库的别名,比如byte对应System.Byte,short对应System.Int16等。
    ● 结构和枚举属于值类型。

    什么是BCL基类库:
    Base Class Library基类库,即mscorlib.dll这个程序集中包含类库。不管项目的"引用"文件夹里是否引用,默认是引用进来的。C#中的关键字,比如int, string都会被映射到BCL基类库中的对应类型。BCL也为中间语言CIL提供基础支持。

    栈(Stack)和堆(Heap):
    栈和堆

      在对变量操作前是不会入栈的

    展开

    1

      一旦对变量操作,就会有出栈和入栈操作

    展开

    2  

      引用类型初始化需要new对象,否则报错

    把结构类型改成class,生成的时候会出现编译错误。

    展开

    3

      所有的元素在使用前必须初始化,否则报错

    把cat._age = 1;注释掉。

    展开

    4

      对结构而言,在调用方法之前需要对所有字段进行赋值

    展开

    5

    去掉cat._age = 1;的注释,运行。

    6

    如果要对结构的每个字段赋值会很麻烦。

      结构类型的构造函数

    □ 使用结构的构造函数对结构字段进行初始化

     

    是由编译器隐式为结构类型创建的。在构造函数中对结构类型进行初始化,值类型的初始值是0,引用类型的初始值是null。

    注意:不可以对结构类型显式地声明构造函数。

    展开

    运行结果:
    7

    IL部分:
    8

    可见:
    MyCuteCat cat意味着在线程栈上创建了一个类型为MyCuteCat的变量cat,并入栈。
    new MyCuteCat()并不是创建实例,也不不会分配内存,仅仅是调用结构的构造函数对字段进行初始化。

    □ 如果没有声明局部变量,会创建一个临时变量

    展开

    9

    □ 通过结构的构造函数为结构字段赋初值

    展开

    10

    IL部分:
    11

    ※参考资料
    《.NET之美》--张子阳,感谢写了这么好的书!

  • 相关阅读:
    自动杀死僵尸进程的脚本
    利用CodeBlocks修改PUTTY以文件形式保存配置信息
    [C#Util]读写文件汉字乱码
    [Hadoop]在Windows上安装Hadoop
    [短彩信]C#短彩信模块开发设计(1)——架构
    [MQ]ActiveMQ消息收发简单例子
    [C#Util]ObjectPool Prototype
    [DesignPattern]各自用一句话来概括MVC、MVP、MVVM的差异特点
    [Java]Jersey Spring Integration Demo
    [OpenSource]浅谈.Net和Java互相调用的三种方式
  • 原文地址:https://www.cnblogs.com/darrenji/p/3595505.html
Copyright © 2011-2022 走看看