const VS readonly
前段时间在CSDN看到有个帖子问关于常量(const )和只读(readonly)的区别,觉得很有意思,于是找了些资料,写了些代码研究了一下。
发现常量和只读变量有以下区别
1.常量必须在声明时就被初始化,指定了值后就不能修改了.只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造以后值就不能修改.
2.常量是静态的,而自读字段可以是静态和动态的
3.Const可以用在字段和局部变量,readonly只可以修饰字段
以下是我的测试代码
//说明:没有编号的字段在声明时不初始化,构造时被初始化
//编号为1的字段在声明时初始化,构造时不被初始化
//编号为2的字段在声明时,构造时都被初始化
//编号为3的字段在声明时,构造时都不被初始化
public class Test
...{
//常量
//常量必须在声明时就被初始化,使用下面语句的出现编译错误"常数字段要求提供一个值"
//const string myConst;
const string myConst="声明时被初始化";
//静态只读
public static readonly string myStaticReadonly;
public static readonly string myStaticReadonly1="声明时被初始化";
public static readonly string myStaticReadonly2="声明时被初始化";
public static readonly string myStaticReadonly3;
//只读
public readonly string myReadonly;
public readonly string myReadonly1="声明时被初始化";
public readonly string myReadonly2="声明时被初始化";
public readonly string myReadonly3;
//默认构造函数
public Test()
...{
myReadonly="默认构造函数时被初始化";
myReadonly2="默认构造函数时被初始化";
}
//带参构造函数
public Test(string arr)
...{
myReadonly=arr;
myReadonly2=arr;
}
//静态构造函数,此函数不能带参数
static Test()
...{
myStaticReadonly="构造时被初始化";
myStaticReadonly2="构造时被初始化";
//常量的值不能在构造函数中被更改,使用下面语句的出现编译错误"赋值号左边必须是变量、属性或索引器"
//myConst="value";
}
//试验在用静态方法改变常量和自读变量的值
public static void StaticChangeValue()
...{
//常量的值不能被改变,使用下面语句的出现编译错误"赋值号左边必须是变量、属性或索引器"
//myConst="被改变";
//无法在构造后改变自读字段的值,使用下面语句的出现编译错误"无法对静态只读字段赋值(静态构造函数或变量初始值设定项中除外)"
//myStaticReadonly="被改变";
}
//试验在用方法改变自读变量的值
public void ChangeValue()
...{
//无法在构造后改变自读字段的值,使用下面语句的出现编译错误"无法对只读的字段赋值(构造函数或变量初始值指定项中除外)"
//myReadonly="被改变";
}
//试验静态局部常量和自读变量
public static void Include()
...{
const string includeConst="局部静态常量";
//readonly不能修饰静态局部变量
//static readonly includeReadonly="局部静态自读变量";
}
//试验局部自读变量
public void StaticInclude()
...{
//readonly不能修饰局部变量
//readonly staticIncludeReadonly="局部静态自读变量";
}
public static void Main()
...{
//参看静态数据
Console.WriteLine("Test.myConst:"+Test.myConst);
Console.WriteLine("Test.myStaticReadonly:"+Test.myStaticReadonly);
Console.WriteLine("Test.myStaticReadonly1:"+Test.myStaticReadonly1);
Console.WriteLine("Test.myStaticReadonly2:"+Test.myStaticReadonly2);
Console.WriteLine("Test.myStaticReadonly3:"+Test.myStaticReadonly3);
Console.WriteLine("");
Test test=new Test();
Console.WriteLine("test.myReadonly:"+test.myReadonly);
Console.WriteLine("test.myReadonly1:"+test.myReadonly1);
Console.WriteLine("test.myReadonly2"+test.myReadonly2);
Console.WriteLine("test.myReadonly3"+test.myReadonly3);
Console.WriteLine("");
Test test1=new Test("带参构造函数时被初始化");
Console.WriteLine("test1.myReadonly:"+test1.myReadonly);
Console.WriteLine("test1.myReadonly1:"+test1.myReadonly1);
Console.WriteLine("test1.myReadonly2"+test1.myReadonly2);
Console.WriteLine("test1.myReadonly3"+test1.myReadonly3);
Console.WriteLine("");
Console.WriteLine("从结果可以看出构造时初始化的值将覆盖声明时初始化的值");
Console.WriteLine("没有初始化的只读字段被赋予默认值,空值");
Console.Read();
}
}
转载于:https://www.cnblogs.com/renrenqq/archive/2004/07/02/20406.html
const VS readonly相关推荐
- const与readonly,析构函数,虚拟方法
const 与readonly const 关键字用于修改字段或局部变量的声明.它指定字段或局部变量的值不能被修改.常数声明引入给定类型的一个或多个常数. 常数声明可以声明多个常数,例如 ...
- const和readonly内部区别
const和readonly关键字也是面试中经常考到的问题,通常都是用来表示一个不可变的变量成员,那么具体区别是什么?从用法上说,const只能以inline代码的形式定义,而readonly既可以以 ...
- const和readonly
说道定义的变量不容修改的问题,不得不说起C#中还有一个readonly关键字,也是使用在字段上定义不容修改的值,但是const和readonly有几个区别, 区别1) 在语 ...
- 20100422.C#.const VS readonly
const和readonly这对"顽固"的兄弟着实会让我这样的菜鸟迷惑. 研究了一番算是有所感悟了. const常量在编译时就会确定值,编译器直接进行值replace,就像是C语言 ...
- C# 总结const、 readonly、 static三者区别:
总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...
- 如何在 C# 中使用 const,readonly,static
平时在开发时经常会用到 const,readonly,static 关键字,可以肯定这些关键词是完全不同的概念,但有时候他们在用法上很相似以至于在场景中不知道选择哪一个,这篇文章我们就来讨论 C# 中 ...
- const 和readonly
原文:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 关于 const和readonly修饰符之间的区别,要牵涉到C# ...
- C#中const和readonly的区别
C#引入了readonly修饰符来表示只读域,const来表示不变常量.顾名思义对只读域不能进行写操作,不变常量不能被修改,这两者到底有什么区别呢?只读域只能在初始化--声明初始化或构造器初始化--的 ...
- c# const与readonly 关键字的比较
C#中,const 与readonly是两个比较有用的关键字.const 与 readonly 定义的数据成员在初始化都不能再改变. 比如定义了 public class MathUtitlity { ...
- C# const与readonly的用法和区别解析(转)
总结一下const和readonly: 1.const和readonly的值一旦初始化则都不再可以改写: 2.const只能在声明时初始化:readonly既可以在声明时初始化也可以在构造器中初始化: ...
最新文章
- 为asa防火墙配置ssh登陆
- 江苏“超牛”女博导:16岁考入北大,跨专业读博,成为全球第4个获此奖项的学者!...
- 常用的java虚拟机_带你了解 JAVA虚拟机 面试必备
- 寻找是生命中的另一场迷失
- 手把手玩转win8开发系列课程(22)
- logistic regression_【科研加油站】SPSS操作之有序Logistic回归的详细教程
- 在VS2015中使用SDL2.0
- HDU_2156 分数矩阵
- Apache 开启伪静态模块
- 分享10个优秀的技术栈社区
- CCF所有领域best paper合集!发顶会论文必看!中国计算机学会推荐会议的Best paper~
- 健身用肌酸市场前景分析及行业研究报告
- RedHat7.5最小化安装之后一些配置
- java如何设置成中文字体,Java程序中文字体配置
- 直插电阻色环电阻读电阻阻值,电阻误差与电阻温度系数方法图文
- ¥1-1 SWUST oj 941: 有序顺序表的合并操作的实现
- 用c++实现AES基本算法
- Vivado中Simulator仿真软件的使用
- jsp连接数据库出现java.lang.ClassNotFoundException: com.mysql.jdbc.Driver异常以及不同情况的排错解决方法
- 智康护智慧养老,民政监管养老机构管理解决方案
热门文章
- 真人节目《通灵之战》的观后感
- android最贵的手机,2019翻盖手机排行榜_2019年最贵的手机有哪些?最贵手机排行榜...
- java动态bean_Java如何操作对象(bean)进行动态排序?
- java 怎么给其他进程发送消息_Java程序与其它进程的数据通信
- linq分类汇总怎么写_包围结构的字怎么写才好看?掌握方法是关键,分类总结要领很实用...
- java转sap hybris方向_SAP Hybris的Convertor, Populator, Facade和DTO这几个概念是如何协同工作的...
- HSPA+系列之“下行增强F-DPCH +下行增强CELL_FACH
- Sudo环境变量继承
- spark的集群安装
- 使用GDB进行嵌入式远程调试