zoukankan      html  css  js  c++  java
  • C#基础知识七之const和readonly关键字

    前言

    不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量。

    • 静态常量

      所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值。

    • 动态常量

      所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造函数初始化。

    const和readonly

    const修饰的常量是上述中的第一种,即静态常量,而readonly是上述中第二种即动态常量。他们的区别可以从静态常量和动态常量的特性来说明:

    • const修饰的常量在声明时必须初始化值;readonly修饰的常量可以不初始化值,且可以延迟到构造函数。
    • cons修饰的常量在编译期间会被解析,并将常量的值替换成初始化的值;而readonly延迟到运行的时候。
    • const修饰的常量注重的是效率;readonly修饰的常量注重灵活。
    • const修饰的常量没有内存消耗;readonly因为需要保存常量,所以有内存消耗。
    • const只能修饰基元类型、枚举类、或者字符串类型;readonly却没有这个限制。

    代码测试

     1. 如果我们在const修饰的常量前加static的话,会提示错误,因为const编译后就是static常量了。(PM:如果不编译的话,编辑器不会报错。编译后,再提示错误! )

     class Program
        {
            static const int temp = 100;
    
            static void Main(string[] args)
            {
            }
        }

    2. readonly修饰的在构造函数中被赋值后就不可以改变。

    3.代码如下:

     class Program
        {
            static readonly int A = B * 10;
            static readonly int B = 10;
            public static void Main(string[] args)
            {
                Console.WriteLine("A is {0},B is {1} ", A, B);
                Console.ReadLine();
            }
        }

     

    readonly是动态常量,在编译期间是不会解析的,所以开始就是默认值, A和B都是int类型,值都是0,所以A=0*10=0,程序接着执行到B=10,才会真正的B的初值10赋给B。

  • 相关阅读:
    OCP-1Z0-051-V9.02-162题
    OCP-1Z0-051-V9.02-161题
    OCP-1Z0-051-V9.02-160题
    Matlab中矩阵的分解
    OCP-1Z0-051-V9.02-158题
    OCP-1Z0-051-V9.02-157题
    Matlab中特殊的矩阵函数
    求Matlab中矩阵的秩和迹
    Matlab中的条件数
    在android里使用boost c++
  • 原文地址:https://www.cnblogs.com/liujie2272/p/5465255.html
Copyright © 2011-2022 走看看