• 关于const和readonly的一些用法与区别


    来源:http://www.manew.com/blog-242626-43358.html

    ①只读变量readonly分静态只读变量和非静态只读变量,非静态的需要实例化对象进行访问

     

    ②只读变量可以进行再赋值,但只有初始化,在构造器中这两次,实例化完毕后就无法再赋值

     

    静态只读变量只有在静态构造函数中再次赋值,非静态只读变量只有在普通构造函数中赋值

     

    ④const常量自带static,无法用static修饰符,但也受到访问修饰符影响,例如:public,private

     

    ⑤const常量只能在初始化定义时赋一次值,其他任何情况都无法赋值,只能使用

    以下是论证:

    关于这两者关键字,最开始其实我也是一直有些混乱,最近在网上查了些,然后自己总结了下,我尽量写详细些吧,虽然语文一直在及格线上徘徊

     
    首先我们来了解一下这两个关键字的几个形态,const是常量,readonly是只读
    为学习方便,新建一个控制台实例,名字随意。
    然后创建一个测试类testClass
    先定义几个变量以示例:

    public static readonly string a="a";
    //这是一个静态的只读变量a,并且赋予初值"a"
    public const string b = "b";
    //这是一个常量b并赋予初值"b",注意,const关键字不能加static,但默认就已经是静态的字段,不过还是会受到访问级别的限制,这里我给它添加一个public
    public readonly string c = "d";
    //非静态只读变量c,赋予初值"c",与a变量区分以作其他功能测试
     
    接下来正式开始测试
    首先测试静态的只读变量a

    然后我们可以看出,直接在构造函数里面给a赋值将会失败,提示:无法对静态只读字段赋值(静态构造函数或变量初始值中除外)

    不过我们可以直接使用这个变量a

    在Main函数中直接赋值也会报这个错。

    然后我们删除,直接打印testClass.a

    (MD,这个蛮牛水印太恶心了,完全看不到了嘛……)

    由于水印,可能看不清,具体是这么写的:Console.WriteLine("a=" + testClass.a);

    然后根据提示我们来在静态构造函数中进行再赋值:

    n是我额外加的一个判断静态构造函数执行次数的计数变量,暂时不管

    之后再次测试结果:

    大致应该懂了readonly的基础用法,也就是在初始化的时候可以赋一次初值外,在静态构造函数中也可以执行赋值

    然后是测试const,经测试,只能在定义const时进行赋值,其他任何情况都无法更改const的值

    最后,测试非静态只读变量c

    图中可知,对于readonly,也必须得满足面向对象的写法,非静态变量依然得实例化一个对象来"."出来使用

    不过也得到一个信息就是,readonly可以在对象构造函数中进行再赋值,接下来看看这个赋值是否有效(c在定义时赋的是"d"):

  • 相关阅读:
    洛谷P3233 世界树
    线性基
    CF321E Ciel and Gondolas
    洛谷P2619 Tree I
    重温一下基本数据类型以及自动提升数据类型的问题
    不可理喻的JSTL标签库
    理解RESTful架构(转)
    Node.js的优点和缺点(转载)
    自制双色球随机号码
    编程, 细心永远都不嫌多(记录java连接数据库的一个错误)
  • 原文地址:https://www.cnblogs.com/LiTZen/p/11837349.html
Copyright © 2020-2023  润新知