zoukankan      html  css  js  c++  java
  • readonly与const

    http://www.cnblogs.com/Kenny-Jiang上看到他关于readonly与const的区别的讲解,而且看到后边的回复也有一些讲解..
     受益良多.在此把众位的观点摘录如下:

     一、readonly和const是两种不同的常量,其中readonly是运行时常量,而const是编译时常量。
         举例:
        public static readonly int A = 2//A为运行时常量
     
    public const int B = 3//B为编译时常量
        注意,const默认为static类型,所以无需用static修饰,如果强制用static进行声明将导致编译错误。
        下面的表达式:
    int C = A + B;

        经过编译后与下面的形式等价:

    int C = A + 3;

        可以看到,其中的const常量B被替换成字面量3,而readonly常量A则保持引用方式。

      const常量只能被赋予数字(整数、浮点数)、字符串以及枚举类型。下面的代码无法通过编译:

    public const DateTime D = DateTime.MinValue;

        改成readonly就可以正常编译:

    public readonly DateTime D = DateTime.MinValue;

    二、const常数表达式在编译时是完全可以计算的,因此不能通过一个变量的值来进行初始化,比如:
    public    const int A=b+1;
      此时的b是一个变量 ,显然,在编译时是不可以计算的。因此,const常数表达式(变量)不可以用变量来初始化。
     而 readonly可以把设定一个字段为常量,但由于它是运行时计算的,因此可以通过变量进行初始化。

    三:两者的区别之处:

    1. const 字段只能在该字段的声明中初始化。
        对于某个类来说:readonly常量是其实例成员。因此readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly字段可能具有不同的值。
    2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
    3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
    4. const 对于引用类型的常数,可能的值只能是 string 和 null。对于值类型的常数可以是数字(整数、浮点数)以及枚举类型
       readonly可以是任何类型
  • 相关阅读:
    如何在Linux下的C++文件使用GDB调试
    21天学通C++(C++程序的组成部分)
    嵌入式Linux应用程序开发
    项目部署的问题
    未解决
    报错
    随笔
    逆向工程出现的错误1
    jpa学习
    springmvc整合mybaits
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1208103.html
Copyright © 2011-2022 走看看