zoukankan      html  css  js  c++  java
  • 值类型 引用类型 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; 无法对只读字段赋值
    }

     

  • 相关阅读:
    开发小技巧: 如何在jQuery中禁用或者启用滚动事件.scroll java程序员
    Spell Checker 新版Chrome的纠错特性 java程序员
    45个漂亮且有创意的HTML5网站展示 java程序员
    70个jquery触摸事件插件——支持手势触摸! java程序员
    40个超酷的jQuery动画教程 java程序员
    极客技术专题【002期】:开发小技巧 如何使用jQuery来处理图片坏链? java程序员
    30个热门的CSS3 Image Hover 脚本 java程序员
    2013年三月GBin1月刊 java程序员
    插入1000万数据的几种优质算法
    批量上传图片(带百分比进度显示)项目源码
  • 原文地址:https://www.cnblogs.com/fanlin92/p/9667535.html
Copyright © 2011-2022 走看看