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

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

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/jiawei-whu/p/4347388.html
Copyright © 2011-2022 走看看