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

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

  • 相关阅读:
    20145204《信息安全系统设计基础》期中总结
    20145204&20145212信息安全系统实验一报告
    k8s运维记
    服务器免密登录
    非正常关闭vi编辑器产生swp文件怎么删除
    centos7 安装 python3 、docker、 docker-compose 脚本
    数据库高可用方案
    centos7安装docker-compose报错解决办法
    centos7 一键安装python3 --转发
    安装docker-compose的两种方式
  • 原文地址:https://www.cnblogs.com/jiawei-whu/p/4347388.html
Copyright © 2011-2022 走看看