(一)实践代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;

namespace ConstReadOnlyDemo{//常量(const表示):在应用程序的生存周期内保持不变的字段//常量的三个规则//(1)常量成员的值是在编译时设置的//(2)常量成员的值必须被写为文字的形式//(3)要想字段的值为常量,只需要被指定的成员前,指定const关键字//(4)默认情况下const成员是静态的。

//只读(readonly):如果在运行前不知道字段的值,而且一旦字段的值被初始化后不应在修改//(1)可以在一个地方设置字段的值(在构造器中设置)//(2)设置后,类本身和客户都不能修改此字段。

//类型初始化器:在包含类型的类中定义的方法,他们使类型可以对本身进行初始化//规则是://(1)静态的//(2)无参数的//(3)没返回值的//(4)具有rtspecialname和specialname属性//(5)被命名为.cctor    class MagicNumbers    {public const double pi = 3.1415;public const int answerToAllLifeQuestion = 42;    }

//场景解释://假设应用程序需要跟踪当前工作站的IP地址(你不希望用const解决这个问题,因为这需要对IP地址进行硬编码)//而且如果工作站是以动态方式获得IP地址的,那么const技术起不到作用了。此时需要用readonly了

//实例处理方法    class Workstation2    {public Workstation2()        {string hostName = Dns.GetHostName();            IPAddress ipAddress = Dns.Resolve(hostName).AddressList[0];            IPAddressString = ipAddress.ToString();        }public const string HostName = "consette";public readonly string IPAddressString;    }

//静态处理方法    class Workstation    {       //去掉public:静态构造器中不用需出现访问修饰符(静态构造器总是公共的)//静态构造器:用于对静态字段、只读字段,或其他东西初始化        static Workstation()        {

            IPAddress ipAddress = Dns.Resolve(HostName).AddressList[0];            IPAddressString = ipAddress.ToString();        }public const string HostName = "WIN-RMEKHP84MBJ";public static readonly string IPAddressString;    }

class Program    {static void Main(string[] args)        {            Console.WriteLine("常量 PI={0}" , MagicNumbers.pi);            Workstation2 workstation = new Workstation2();            Console.WriteLine("主机 {0} 的IP地址是 {1}", Workstation.HostName, workstation.IPAddressString);            Console.WriteLine("主机 {0} 的IP地址是 {1}", Workstation.HostName, Workstation.IPAddressString);            Console.ReadKey();        }    }}

(二)运行截图:

(三)解释说明:

(1)用ILDASM(IL反汇编程序)查看运行后的.exe文件

(2)为什么说const成员默认是静态的,看下图反汇编程序就知道了

(3)readonly用IL反汇编查看器

(4)类型初始化器

转载于:https://www.cnblogs.com/Joetao/articles/2153439.html

常量(const)与只读(readonly)字段相关推荐

  1. 常量(const)和只读变量(readonly)

    //const修饰的数据叫做 常量//常量一旦声明常量的值就不能改变.//常量在声明的时候 必须要赋初始值//C#编译器在编译的时候 声明常量的那句话不见了.//在使用常量的地方就用常量的值代替了./ ...

  2. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const

    C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...

  3. const和static readonly 区别

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

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

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

  5. const 与 static readonly 的区别

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

  6. Linux文件系统只读Read-only file system的解决方法

    Linux文件系统只读Read-only file system的解决方法 参考文章: (1)Linux文件系统只读Read-only file system的解决方法 (2)https://www. ...

  7. 石川es6课程---3、变量let和常量const

    石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...

  8. 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

    文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...

  9. (14)System Verilog 常量const详解

    (14)System Verilog 常量const详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 常量const详解 5)结语 ...

最新文章

  1. 数据仓库专题18-数据建模语言IDEF(转载)
  2. “证券教父”阚治东旗下东方汇富成失信被执行人 官方澄清
  3. Javag工程师成神之路(2019正式版)
  4. 在K40小破卡训练50层BERT Large的宝藏trick
  5. 用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现
  6. python自学笔记(七)排序与多级排序
  7. 主流Java微服务框架有哪些?-开课吧
  8. sql lab 爆库 心得
  9. 区间DP HDU 2476
  10. 计算与编程思维-Python实践【Python Crash Course】
  11. 机器学习数学基础六:核函数变换
  12. 【软件工程笔记】用例图、类图、ER图、系统流程图、软件结构图
  13. 两个队列实现一个栈(C++实现)
  14. mybatisplus自动生成id_【mybatis-plus】主键id生成、字段自动填充
  15. 软件工程专业大学四年学什么
  16. DNS作用及工作原理
  17. dataguard配置及数据测试
  18. usaco1.3 calfflac 2008.11.5
  19. 树莓派控制Dobot遇到的问题
  20. 第三章:DQL命令(一)

热门文章

  1. 模板 - 数学 - 数论 - 莫比乌斯反演 - 2
  2. 4698: Sdoi2008 Sandy的卡片
  3. [转]Linux配置防火墙
  4. MATLAB垂直搜索图片中的白段
  5. Ubuntu Linux 安装 .7z 解压和压缩文件
  6. PHP数据库链接类(PDO+Access)
  7. C#二叉树遍历算法实现浅析
  8. framework之Activity 生命周期解析(基于Android11源码)
  9. 【Android】Android中判断后台服务是否正在运行
  10. mysql @value := 用法