• 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字段在内存中有存储位置。

  • 相关阅读:
    【网络编程3】网络编程基础-arp请求(局域网主机扫描)
    【CTF MISC】隐写术wireshark找出图片-“强网杯”网络安全挑战赛writeup
    【网络编程2】网络编程基础-发送ICMP包(Ping程序)
    【网络编程1】网络编程基础-TCP、UDP编程
    【漏洞分析】两个例子-数组溢出修改返回函数与strcpy覆盖周边内存地址
    【Python】zip文件密码破解
    【bzoj1923】[Sdoi2010]外星千足虫 高斯消元
    spring cloud zuul在使用中遇到的坑 : 转发时自动去掉prefix
    Eclipse MAT:浅堆 vs 保留堆
    Java SDK夯住(Hang)问题排查
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602154.html
Copyright © 2020-2023  润新知