C# 总结const、 readonly、 static三者区别:
总结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三者区别:的更多相关文章
- php中const和static的区别和联系
1.const是类中的常量,类外用define来定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于n ...
- 如何使用C#关键字const,readonly,static
如果有一个值不太会变化,我们经常使用const和readonly,这2者有何不同呢?有时候,我们也会在readonly之前加上关键字static,这又意味着什么呢? const ● const默认是静 ...
- php中const与static的区别与使用(转)
首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下: class Test{ const PATH = 'c/';//修饰常量 const function te ...
- 今天思考一个问题,PHP const和static的区别
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...
- const与static的区别
const就是只读的意思,只在声明中使用;const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的. const的作用: (1)可以定义const常量,具有不可变性. (2)便于进行类 ...
- 总结const、readonly、static三者的区别【收藏、转载】20190614
总结const.readonly.static三者的区别 const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编 ...
- c#中const、static、readonly的区别
1. const与readonly const ,其修饰的字段只能在自身声明时初始化. Readonly 是只读变量,属于运行时变量,可以在类初始化的时候改变它的值.该类型的字段,可以在声明或构造函数 ...
- const和static readonly的区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...
- C#中的静态常量(const)和动态常量(static和readonly)用法和区别
C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...
随机推荐
- Java的内存泄漏
内存泄漏是指,无用对象(不再使用的对象)持续占用内存或者无用对象的内存得不到及时释放,从而造成的内存浪费 就说是有一块内存你不需要再用了,但是呢你还保留着它的指针,那么这块内存就不会被回收 举个例子 ...
- js jqery判断checkbox是否选中,全选,取消全选,反选,选择奇数偶数项
// 一,判断选中 // js var ischecked2 = function(){ // this.checked == true $(document.getElementsByTagName ...
- ARM处理器工作模式
学习ARM处理器参考的首选资料是ARM Architecture Reference Manual,是最专业权威的学习资料. ARM处理器共有7种工作模式,如表1-1和1-2所示: 表1-1 处理器工 ...
- 深入了解Bundle和Map
[转]http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0402/2684.html 前言 因为往Bundle对象中放入Map实际上 ...
- 安卓 ArrayList,LinkedList,HashSet,Vector,TreeSet的区别和使用
java的集合就那么几种 总体为:List,Set,Map (都是接口由其子类去实现具体的方法) ArrayList,LinkedList,Vector都属于List List:元素是有顺序的,元素可 ...
- 动态添加试题选项按钮 radioButton(一)
最近在做WebView加载试题的功能,但是选项按钮如果放的WebView中,点击时反应很慢.于是把选项用原生的RadioButton,而试题题目和答案放在WebView中.但是选项的个数不确定,所以需 ...
- CentOS 7修复MBR和GRUB
(转载) 一.修复MBR: MBR(Master Boot Record主引导记录): 硬盘的0柱面.0磁头.1扇区称为主引导扇区.其中446Byte是bootloader,64Byte为Partit ...
- BZOJ1237: [SCOI2008]配对
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1237 题目大意:你有n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一 ...
- 在php中使用jquery uploadify进行多图片上传
jquery uploadify是一款Ajax风格的批量图片上传插件,在PHP中使用jquery uploadify很方便,请按照本文介绍的方法和步骤,为你的PHP程序增加jquery uploadi ...
- idea 15破解方法记录
So easy! Only one step. 注册时选择 License server ,填 http://idea.lanyus.com 对于Clion等同样适用.