zoukankan      html  css  js  c++  java
  • readonly

    readonly关键字用于修饰字段。当字段被声明为readonly后,则只能在对应类中声明时和构造函数中对其赋值。

    • 声明时初始化
      public readonly int y = 5;
    • 对于实例字段,在包含字段的类的实例构造函数中初始化;对静态字段,在对应静态构造函数中初始化。
      class Age
          {
              readonly int _year;
              Age(int year)
              {
                  _year = year;
              }
              void ChangeYear()
              {
                  //_year = 1967; // Compile error if uncommented.
              }
          }

      字段_year被声明为readonly,所以在构造函数中为其赋值,在方法ChangeYear中则无法更改。

    readonly和const的差别

    const字段只能在声明时初始化,readonly则可以在声明时和构造函数充初始化。因此,根据构造函数的不同,readonly字段可能具有不同的值。另外,const为编译时常量,readonly字段可用于运行时常量,如下:

    public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;

    示例

    public class ReadOnlyTest
        {
           class SampleClass
           {
              public int x;
              // Initialize a readonly field
              public readonly int y = 25;
              public readonly int z;
    
              public SampleClass()
              {
                 // Initialize a readonly instance field
                 z = 24;
              }
    
              public SampleClass(int p1, int p2, int p3)
              {
                 x = p1;
                 y = p2;
                 z = p3;
              }
           }
    
           static void Main()
           {
              SampleClass p1 = new SampleClass(11, 21, 32);   // OK
              Console.WriteLine("p1: x={0}, y={1}, z={2}", p1.x, p1.y, p1.z);
              SampleClass p2 = new SampleClass();
              p2.x = 55;   // OK
              Console.WriteLine("p2: x={0}, y={1}, z={2}", p2.x, p2.y, p2.z);
           }
        }
        /*
         Output:
            p1: x=11, y=21, z=32
            p2: x=55, y=25, z=24
        */

    可以看到,调用不同构造函数,readonly的值不同。

    对上面的例子,如果使用下面的语句:

    p2.y = 66; // Error

    将收到编译器错误信息:

    The left-hand side of an assignment must be an l-value

    这与尝试将值赋给常数时收到的错误相同。

  • 相关阅读:
    JAVA RMI调用实战学习
    linux下关于压缩、解压相关的操作
    关于hessian接口类方法顺序及对象序列化的实战研究
    Java对象引用传递探索
    mysql 语句or效率问题
    树莓派做下载服务器 aria2 篇
    免费 cdn
    搞定迅雷固件在TP-LINK WR720N,127.0.0.1 9000 获取不到激活码
    Mware vCenter Server 识别固态硬盘为(非SSD)是什么原因?
    XXX esx.problem.syslog.nonpersistent.formatOnHost not found XXX
  • 原文地址:https://www.cnblogs.com/jiawei-whu/p/4347388.html
Copyright © 2011-2022 走看看