总结const、 readonly、 static三者区别:

(有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下。)

const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享!

  a、叫编译时常量的原因是它编译时会将其替换为所对应的值;

  b、静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些;

  c、静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰,

  d、在声明时初始化;

  e、静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。

  f、应用场合例如:Math.PI的定义(要声明一些从不改变且处处唯一的常量,就应该使用静态常量)

readonly:动态常量,也称运行时常量(runtime constants),属于对象级,通过对象访问。

  a、而动态常量的值是在运行时获得的;

  b、动态常量在性能上稍差一点,但是灵活性好比前者好;

  c、readonly可以被static修饰,这时的static readonly和const非常相似;

  d、在声明时初始化,在构造函数里初始化;(static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;)

  e、动态常量可以是任意的数据类型。

  f、应用场合例如:SqlHelper类的连接字符串定义

二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况,此时推荐使用static readonly,因为其是运行时赋值,当常量值被更改,运行时也随之更改。

const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。

static:本不应该把static与前两者放在一起区别对待的,但是static经常和它们搅在一起,所有这里特别把它拿来说个事。static的意义与const和readonly迥然不同,static是指所修饰的成员与类型有关,而与对象无关。

   静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据,比如连接字符串,配置信息等,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。

   非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。

C# 总结const、 readonly、 static三者区别:相关推荐

  1. php中const和static的区别和联系

    1.const是类中的常量,类外用define来定义常量 2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法 3.const和static都属于类本身,而不属 ...

  2. const与static的区别

    static static局部变量 将一个变量声明为函数的局部变量,那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中 static 全局变量 表示一个变量在当前文件的全局内可访问 s ...

  3. 总结const、readonly、static三者的区别【收藏、转载】20190614

    总结const.readonly.static三者的区别 const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编 ...

  4. const和static readonly 区别

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

  5. C#中const和static readonly 的区别

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

  6. const 与 static readonly 的区别

    来作个例子吧: 先创建一个类库ClassLibrary1.dll using System; namespace ClassLibrary1 {     /// <summary>     ...

  7. C#中const和readonly有什么区别?

    C#中const和readonly什么区别? 您什么时候可以使用另一个? #1楼 常量成员是在编译时定义的,不能在运行时更改. 使用const关键字将const声明为字段,并且必须在声明const对其 ...

  8. the different between Const and Static in C++

    1.const规定了一个变量在它初始化值之后,值不能再改变,也就是只读. 来看个例子: const测试例子 在这个测试程序里,我试图在初始化变量c的值之后再修改c的值,编译直接报错,告诉我c已经是一个 ...

  9. java和C++的const 和 final 的区别

    In C++ marking a member function const means it may be called on const instances. Java does not have ...

最新文章

  1. Codeforces Global Round 8 C. Even Picture 题解[巧妙法构造题]
  2. boost:从0到1开发boost(linux、clion)
  3. 201521123091 《Java程序设计》第4周学习总结
  4. ACM入门之【拓扑排序】
  5. Spring源码分析——Bean的生命周期
  6. 【合并区间】排序 + 双指针
  7. mysql merge表介绍
  8. 图解LinkedHashMap原理
  9. 比特(bit)和字节(byte)(1byte=8bit)
  10. linux下amd超频工具,AMD锐龙超频民间工具Work Tool:可单独超CCX模块
  11. Oracle传统基本体系结构初步介绍(2)
  12. c++ websocket客户端_ESP32 Arduino教程:Websocket客户端
  13. layui和js实现二级联动
  14. 如何免费复制百度文库上的文字
  15. C++ STL标准库
  16. 软件体系结构——面向对象风格
  17. 论文笔记:HIE-SQL:History Information Enhanced Network for Context-Dependent Text-to-SQL Semantic Parsing
  18. 如何在WorkNC中快速建立坐标管理器
  19. 27岁自学Python转行靠谱吗?入行晚吗?
  20. 微信小程序基于百度云实现图文识别(胎教级教程)

热门文章

  1. C语言重复加一个数的所有位数字的算法(附完整源码)
  2. OpenGL EnvironmentMapping环境映射的实例
  3. C语言内存管理之结构体
  4. stl中unordered_map 和 map的区别 ?
  5. Elasticsearch中的document数据格式,简单的集群管理,商品的索引的CRUD操作(学习资料记录)
  6. 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写
  7. QT Creater/VS2013的使用(快捷键,调试等)
  8. spring和CXF集成来实现webservices
  9. 打开高效文本编辑之门_调用Linux的sed命令
  10. Kettle使用_21 分组与分析窗口函数