zoukankan      html  css  js  c++  java
  • C#编程(十五)----------只读字段

    只读字段

    当字段声明中含有 readonly 修饰符时,该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现。(在这些上下文中,只读字段可以被多次赋值。)准确地说,只在下列上下文中允许对 readonly 字段进行直接赋值:

    在用于引入该字段的变量声明符中(通过添加一个变量初始值设定项)。

    对于实例字段,在包含字段声明的类的实例构造函数中;对于静态字段,在包含字段声明的类的静态构造函数中。也只有在这些上下文中,将 readonly 字段作为 out 或 ref参数传递才有效。

    在其他任何上下文中,试图对 readonly 字段进行赋值或将它作为 out 或 ref 参数传递都会导致一个编译时错误。

    常量成员和只读成员的对比

    声明一个常量成员 : public const int MONTHS=12

    成员常量的特征如下:

    1.可以有修饰符(默认为private)

    2.成员常量必须在声明的时候初始化,如果 const int YEAR;(会报错)

    3.成员常量的值在初始化之后是不可改变的,

    4.一条鱼成可以声明多个常量

    const int months=12,weeks=52,days=365;

    months,weeks,days都是常量

    5.在声明常量的时候,可以引用已经声明的常量

    const int dsysOfWeek=days/weeks;

    6.常量就是静态变量,常量被当做static字段一样访问.

    class Person

    {

    const int age=20;

    }

    int age=Person.age;

    7.不能声明静态常量,原因是存储位置的不同,静态字段有储存位置,常量没有自己的存储位置.

    声明静态常量的时候会报错.

    只读字段

    使用readonly修饰符声明只读字段.

    class Person

    {

    readonly int age=20;

    Person(int age)

    {

    this.age=age;

    }

    void ChangeAge()

    {

    age=19;//在初始化和构造函数之外不允许改变readonly字段的值.所以这是错误的.

    }

    }

    1.const字段只能在声明语句中初始化,而且必须初始化,初始化之后在任何地方都不能改变;readonly字段既可以在声明时初始化,也可以在构造函数中改变它的值:如果是实例只读字段,可以在实例构造函数中改变它的值,如果是静态只读字段,则可以在静态构造函数中改变它的值。

      2.const字段的值必须在编译器决定,编译完成之后它的值就被替换为字面量;readonly字段的值可以在运行时决定,可以在不同的构造函数中设置不同的值。

      3.const总是像静态字段,在类的外部要通过"类名.常量名"的方式访问;readonly字段既可以是静态字段,也可以是实例字段。

      4.const在内存中没有存储位置,而readonly字段在内存中有存储位置。

  • 相关阅读:
    操作系统复习
    软件工程复习
    2020字节跳动校园招聘算法方向第二场考试题解(部分)
    【牛客】用两个栈来实现一个队列
    LeetCode 62. 不同路径
    LeetCode 79. 单词搜索
    LeetCode 113. 路径总和 II
    LeetCode 389. 找不同
    【牛客】矩阵交换
    【牛客】KiKi学习了结构体和指针
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6483220.html
Copyright © 2011-2022 走看看