当前位置:网站首页>C# const readonly static 关键字区别
C# const readonly static 关键字区别
2022-08-05 00:44:00 【iningwei】
const
静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享!
1、叫编译时常量的原因是它编译时会将其替换为所对应的值;
2、静态常量在速度上会稍稍快一些,但是灵活性却比动态常量差一些;
3、静态常量,隐式是静态的,即被static隐式修饰过,不能再用static重复修饰;
4、在声明时初始化;
5、静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。
6、应用场合例如:Math.PI的定义(要声明一些从不改变且处处唯一的常量,就应该使用静态常量)
readonly
动态常量,也称运行时常量(runtime constants),属于对象级,通过对象访问。
1、而动态常量的值是在运行时获得的;
2、动态常量在性能上稍差一点,但是灵活性比前者好;
3、readonly可以被static修饰,这时的static readonly和const非常相似;
4、在声明是初始化,在构造函数里初始化;(static readonly常量,如果在构造函数内指定初始值,则必须是静态无参构造函数;)
5、动态常量可以是任意的数据类型。
6、应用场合例如:SqlHelper类的连接字符串定义。
以上二者差别
静态常量在编译时会将其替换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况,此时推荐使用static readonly,因为其是运行时赋值,而常量值被更改,运行时也随之更改。
static
本不应该把static 与前两者放在一起 区别对待的,但是static经常和它们搅在一起,所有这里特别把它拿来说个事。static的意义与const和readonly迥然不同,static是指所修饰的成员与类型有关,而与对象无关。
静态字段和静态构造方法,通常适用于一些不会经常变化而又频繁使用的数据,比如连接字符串,配置信息等,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。
非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
总结
const 是编译时常量,readonly是运行时常量;const较高效,readonly较灵活。在应用上以static readonly代替const,以平衡const在灵活上的不足,同时克服编译器优化const性能,所带来的程序集引用不一致问题。
边栏推荐
- Software testing interview questions: What stages should a complete set of tests consist of?
- 软件测试面试题:您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?
- tensor.nozero(),面具,面具
- 软件测试面试题:手工测试与自动测试有哪些区别?
- 金九银十面试跳槽季;你准备好了吗?
- leetcode: 269. The Martian Dictionary
- GCC: Shield dependencies between dynamic libraries
- 软件测试面试题:设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?
- If capturable=False, state_steps should not be CUDA tensors
- tiup status
猜你喜欢
国内网站用香港服务器会被封吗?
Lattice PCIe 学习 1
Bit rate vs. resolution, which one is more important?
PCIe Core Configuration
2022杭电多校第三场 K题 Taxi
阶段性测试完成后,你进行缺陷分析了么?
"WEB Security Penetration Testing" (28) Burp Collaborator-dnslog out-band technology
深度学习训练前快速批量修改数据集中的图片名
进程间通信和线程间通信
[230] Execute command error after connecting to Redis MISCONF Redis is configured to save RDB snapshots
随机推荐
金九银十面试跳槽季;你准备好了吗?
tiup telemetry
软件测试面试题:LoadRunner 分为哪三个模块?
软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
Kubernetes 网络入门
ORA-00257
E - Distance Sequence (prefix and optimized dp
tensor.nozero(), mask, [mask]
gorm joint table query - actual combat
软件测试面试题:软件都有多少种分类?
MongoDB搭建及基础操作
tiup uninstall
Software testing interview questions: Please draw the seven-layer network structure diagram of OSI and the four-layer structure diagram of TCP/IP?
tiup telemetry
oracle create user
倒计时1天!8月2日—4日与你聊聊开源与就业那些事!
软件测试面试题:黑盒测试、白盒测试以及单元测试、集成测试、系统测试、验收测试的区别与联系?
深度学习训练前快速批量修改数据集中的图片名
2021年11月网络规划设计师上午题知识点(下)
TinyMCE禁用转义