C#中表示不变的量(常量)的两种形式:const 和readonly

const 是静态常量

readonly 是动态常量

严格的来讲:const 应该称为常量 而readonly 则应称为只读变量。为什么这么说呢,继续往下看。

使用上的不一样

const 常量在声明时必须初始化

readonly、static readonly 在声明时可以不初始化

readonly 声明的常量通过以下两种方式进行初始化

声明时初始化,构造函数初始化(非静态构造函数)

static readonly 声明的常量通过以下两种方式进行初始化

声明初始化,静态构造函数初始化

const 可以声明字段常量和局部常量

readonly 不能在局部变量中使用

const常量编译后保存于模块的元数据中,无须在托管堆中分配内存

readonly 常量需要分配独立的存储空间

const常量只能是编译器能够识别的基元类型如Int,string,float,char 等

readonly 常量可以是任何类型

const可以定义字段和局部变量 readonly则只能定义字段

数组、结构体不能声明为const常量,因为两者是可变的

容易忽略的地方-const的可能问题

当项目中引用一个dll时,dll中的对象有const常量,但是当修改这个常量后重新编译这个dll,将这个dll覆盖旧的dll,运行exe,会出现const常量的值并未改变

这就是const常量引起的引用程序集不一致的问题

问题的原因就是因为 const 是编译时常量

相对来说, readonly 是运行时常量,所以 const高效,后者灵活,在实际运用中推荐用static readonly 代替const用以解决上述问题。

《你必须知道的.NET》读书笔记

读书笔记:const和readonly、static readonly 那些事的更多相关文章

  1. 《C#高效编程》读书笔记02-用运行时常量(readonly)而不是编译期常量(const)

    C#有两种类型的常量:编译期常量和运行时常量.两者有截然不同的行为,使用不当的话,会造成性能问题,如果没法确定,则使用慢点,但能保证正确的运行时常量. 运行时常量使用readonly关键字声明,编译期 ...

  2. 《Java编程那点事儿》读书笔记(三)——static,this,抽象类,接口和包

    1. static 1)静态变量:Java虚拟机为静态变量开辟单独的存储空间,所以所有的对象内部的静态变量在内存中都指向同一个地址,那么不管哪个对象改变这个成员变量,所有对象中该成员变量的值都发生变化 ...

  3. 【Unity|C#】基础篇(6)——const、readonly、static readonly

    [学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...

  4. const和static readonly的区别

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...

  5. const读书笔记

    Const 的使用读书笔记 Const的主要主要用法有: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名  常对象: 类名 const 对象名 常成员函数 ...

  6. static, readonly, const

    static Use the static modifier to declare a static member, which belongs to the type itself rather t ...

  7. 到底是 const 还是 static readonly

    真的一样? const 和 static readonly 常在程序中用来声明常量,调用方法也没有什么不同,他们真的一样吗?我们可以做个试验. 程序集内的常量 现在我们建立一个程序,里面有一个MyCl ...

  8. 【转】const和static readonly

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声 ...

  9. (C#) What is the difference between "const" and "static readonly" ?

    const int a must be initialized initialization must be at compile time readonly int a can use defaul ...

随机推荐

  1. Python复习之下划线的含义

    __xx__ 系统定义名字 __xx 双下划线的表示的是私有类型的变量.只能是允许这个类本身进行访问了.连子类也不可以 _xx 单下划线 不能用'from moduleimport *'导入 即保护类 ...

  2. 无法识别的属性“targetFramework

    出现这个错误的原因是NET Framework 版本版本号不对应,iis和网站使用的一致版本就可以了.

  3. css实现翻页效果

    如图,鼠标移动到图上,实现右上角翻页的效果,本例主要border边框的设置. 一.基本概念 <html> <head> <style> #demo{ width:0 ...

  4. WORDPRESS点击标题或图片无法链接到文章页面

    在设置出更改固定连接设置

  5. eclipse中如何安装插件ADT及SDK工具

    1.如何在eclipse中安装ADT 首先下载ADT Plugin 下载地址: http://tools.android-studio.org/index.php/adt-bundle-plugin ...

  6. linux允许80端口通过

    yum重装 http://www.07net01.com/storage_networking/Red_Hat_6_2_64ruheshiyongCentosdeYUMyuangengxinfangf ...

  7. CountDownLatch

    使用的实例: @Override public <V> V get(Future<V> future) { final CountDownLatch l = new Count ...

  8. WinForm 与WPF 窗体之间的想到调用

    先放置一个容器控件,并设计 好WinForm(或WPF)窗口 winform 调用 wpf ElementHost el = new ElementHost(); el.Dock = DockStyl ...

  9. YUV RGB播放器 打开, 显示RGB数据

    可以查看RGB像素数据 可以通过菜单栏打开像素数据文件,也可以通过拖拽方式打开文件.如果文件名称中包含了“{w}x{h}”这样的字符串(例如“test_320x420.yuv”),系统会自动解析为该像 ...

  10. 编译原理-词法分析04-NFA & 代码实现

    编译原理-词法分析04-NFA & 代码实现 0.术语 NFA 非确定性有穷自动机nondeterministic finite automation. ε-转换ε-transition 是无 ...