三、const(静态常量)和Readonly(动态常量)有什么区别

静态常量(const)在编译时确定值并替换,不能在构造函数中初始化,适用于不变的常数值。动态常量(readonly)在运行时赋值,可以在构造函数中初始化,允许延迟赋值,适合于需要在运行时确定的常量。readonly对引用类型变量的引用不可变,但可改变引用对象的值。const在程序集更新时可能导致版本不一致,readonly每次运行都能获取最新值。
摘要由CSDN通过智能技术生成

1.静态常量(const)和动态常量(Readonly)的区别

静态常量(Const)指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。(常量一定是静态的且不能修改,静态的变量、字段不一定是常量)

动态常量(Readonly)的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。

静态常量(Compile-time Constant)

动态常量(Runtime Constant)

定义

声明的同时要设置常量值。

声明的时候可以不需要进行设置常量值,可以在类的构造函数中进行设置。

类型限制

只能修饰基元类型(类库存在的类型),枚举类型或者字符串类型。

没有限制,可以用它定义任何类型的常量。

对于类对象而言

对于所有类的对象而言,常量的值是一样的。

对于类的不同对象而言,常量的值可以是不一样的。

内存消耗

要分配内存,保存常量实体。

总结

性能要略高,无内存开销,但是限制颇多,不灵活。

灵活,方便,但是性能略低,且有内存开销。

2.动态常量(Readonly)被赋值后不可以改变

  ReadOnly 变量是运行时变量,它在运行时第一次赋值后将不可以改变。其中“不可以改变”分为两层意思:

  • 对于值类型变量,值本身不可以改变(Readonly, 只读)

  • 对于引用类型变量,引用本身(相当于指针)不可改变。

详细笔记参考这位博主文章: C#基本知识点-Readonly和Const的区别 - 梦在前方 - 博客园 (cnblogs.com)
  1. 总结

  • 查看

  • Const和Readonly的最大区别(除语法外)

  • Const的变量是嵌入在IL代码中,编译时就加载好,不依赖外部dll(这也是为什么不能在构造方法中赋值)。Const在程序集更新时容易产生版本不一致的情况。

  • Readonly的变量是在运行时加载,需请求加载dll,每次都获取最新的值。Readonly赋值引用类型以后,引用本身不可以改变,但是引用所指向的实例的值是可以改变的。在构造方法中,我们可以多次对Readonly赋值。

  • 查看IL代码在本机安装地址C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\ildasm.exe,程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值