• 值类型 引用类型 const readonly等


    C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实例)存储;作为局部变量时,存储在栈上。值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体。

    C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。引用类型支持多态,适合用于定义应用程序的行为。

    值类型直接存储其值,而引用类型存储对其值的引用。每一个值类型都有一个独立的内存区域保存自己的值,调用它的时候调用的是他的值,而引用类型调用的是内存中的地址

    Heap是堆,空间是由手动操作分配和释放的,它的存储区很大的自由存储区。

    Stack是栈,是由是操作系统自动分配和释放的,栈上的空间是有限的。程序在编译期间变量和函数分配内存都是在栈上进行的,且在运行时函数调用时的参数的传递也是在栈上进行的

     1.栈内存存储的是局部变量而堆内存存储的是实体;

    2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

    3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

    静态常量(Const)是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。
    动态常量(Readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。

    如下例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class Calendar
    {
    public const int Moths = 12; //const必须在声明中初始化
    public readonly int _days=365; //readonly在声明中初始化
    public readonly int _weeks;
    public Calendar() //readonly在构造函数内初始化
    {
    _weeks = 52;
    }
    public Calendar(int days,int weeks) //readonly在构造函数内初始化
    {
    _days = days;
    _weeks = weeks;
    }
    public void setvalue(int days,int weeks)
    {
    // _days = days; 无法对只读字段赋值
    //_weeks = weeks; 无法对只读字段赋值
    }

     

  • 相关阅读:
    gentoo Wireless Configuration
    Gentoo: Chrome
    Gentoo: user's permission
    参考
    GithubPages上部署hexo
    hexo 个人博客搭建
    服务器修改用户名和密码
    CentOS 服务器搭建 mediawiki
    mysql 修复命令日志
    个体如何采用敏捷的工作方式
  • 原文地址:https://www.cnblogs.com/fanlin92/p/9667535.html
Copyright © 2020-2023  润新知