zoukankan      html  css  js  c++  java
  • c#:readonly与const的区别

    readonly与const的区别:
    1.初始化:const  字段只能在该字段的声明中初始化。 readonly  字段可以在声明或构造函数中初始化。
    2.值: const 字段是编译时常量(const本身是static,不能与static一起使用),readonly 字段可用于编译时常量,也可用于运行时常量。const修饰的字段其值不能被改变,只有一个值;readonly 字段的值(包括运行时常量的值和编译时常量的值)可以在所使用的构造函数中被改变,即readonly 字段可能具有不同的值。
    class Class1    //实例成员应用readonly
    {      
        //readonly在声明时初始化
        public readonly double x = 58.5;//此时x与y没区别
        public const double y = 58.5;
     
        public readonly double a = int.Parse("58.5");
        //public const double b = int.Parse("58.5");//报错:b的表达式必须是常量
     
        public readonly int c = (int)new Random().Next(10,20);
        //public const int d = (int)new Random().Next(10, 20);//报错:d的表达式必须是常量
     
        //readonly在构造器中初始化
        public Class1()
        {
            x = 12;
            //y = 12;//报错:赋值号左边必须是变量、属性或索引器,也就是说const值不能再次赋值
            c = (int)new Random().Next(10, 20);
        }
    }
    class Class2   //静态字段使用readonly
    {
        //readonly修饰静态字段时可以在声明时初始化
        public static readonly double x = 58.5;//此时x与y没区别
        public const double y = 58.5;
     
        public static readonly double a = int.Parse("58.5");
        //public const double b = int.Parse("58.5");//报错:b的表达式必须是常量
     
        public static readonly int c = (int)new Random().Next(10,20);
        //public const int d = (int)new Random().Next(10, 20);//报错:d的表达式必须是常量
     
        //readonly修饰静态字段时也可以在静态构造器中初始化
        static Class2()
        {
            x = 12;//readonly的编译时常数值可以在静态构造器中再次被改变
            //y = 12;//报错
            c = (int)new Random().Next(10, 20);//readonly的运行时常数值可以在静态构造器中再次被改变
        }
    }
  • 相关阅读:
    广度优先搜索
    洛谷 P1126 机器人搬重物
    codevs 1058 合唱队形
    洛谷P1216 [USACO1.5]数字三角形 Number Triangles
    Codevs 1576 最长严格上升子序列
    跳马(Knight Moves), ZOJ1091, POJ2243
    洛谷 P1644 跳马问题
    NOI 2971 抓住那头牛
    NOI 2727 仙岛求药
    搜索与回溯算法
  • 原文地址:https://www.cnblogs.com/fantasy2121/p/6281765.html
Copyright © 2011-2022 走看看