常量(const)与只读(readonly)字段
(一)实践代码:
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)字段相关推荐
- 常量(const)和只读变量(readonly)
//const修饰的数据叫做 常量//常量一旦声明常量的值就不能改变.//常量在声明的时候 必须要赋初始值//C#编译器在编译的时候 声明常量的那句话不见了.//在使用常量的地方就用常量的值代替了./ ...
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- const和static readonly 区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等. 在多数情况下可以混用. 二者本质的区别在于,const的值是在编译期间确定的,因此只能 ...
- C#中const和static readonly 的区别
我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用. 二者本质的区别在于,const的值是在编译期间确定的,因此只能在 ...
- const 与 static readonly 的区别
来作个例子吧: 先创建一个类库ClassLibrary1.dll using System; namespace ClassLibrary1 { /// <summary> ...
- Linux文件系统只读Read-only file system的解决方法
Linux文件系统只读Read-only file system的解决方法 参考文章: (1)Linux文件系统只读Read-only file system的解决方法 (2)https://www. ...
- 石川es6课程---3、变量let和常量const
石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...
- 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...
- (14)System Verilog 常量const详解
(14)System Verilog 常量const详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog 常量const详解 5)结语 ...
最新文章
- 数据仓库专题18-数据建模语言IDEF(转载)
- “证券教父”阚治东旗下东方汇富成失信被执行人 官方澄清
- Javag工程师成神之路(2019正式版)
- 在K40小破卡训练50层BERT Large的宝藏trick
- 用Keil-MDK开发TQ2440裸机程序入门教程——LED流水灯实现
- python自学笔记(七)排序与多级排序
- 主流Java微服务框架有哪些?-开课吧
- sql lab 爆库 心得
- 区间DP HDU 2476
- 计算与编程思维-Python实践【Python Crash Course】
- 机器学习数学基础六:核函数变换
- 【软件工程笔记】用例图、类图、ER图、系统流程图、软件结构图
- 两个队列实现一个栈(C++实现)
- mybatisplus自动生成id_【mybatis-plus】主键id生成、字段自动填充
- 软件工程专业大学四年学什么
- DNS作用及工作原理
- dataguard配置及数据测试
- usaco1.3 calfflac 2008.11.5
- 树莓派控制Dobot遇到的问题
- 第三章:DQL命令(一)