Readonly 与Const

readonly 关键字是可以在字段上使用的修饰符。当字段声明包括 readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。

对于实例字段,在包含字段声明的类的实例构造函数中;或者,对于静态字段,在包含字段声明的类的静态构造函数中。也只有在上下文中,将 readonly字段作为out或ref参数传递才有效。

readonly关键字与const关键字不同。const字段只能在该字段的声明中初始化。readonly字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly字段可能具有不同的值。另外,const字段为编译时常数,而 readonly字段可用于运行时常数,

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。

常数声明的类型指定声明引入的成员类型。常数表达式必须产生具有目标类型或者可隐式转换为目标类型的类型的值。

常数表达式是在编译时可被完全计算的表达式。因此,对于引用类型的常数,可能的值只能是 string和 null。

常数声明可以声明多个常数,不允许在常数声明中使用 static修饰符。常数可以参与常数表达式,

C#的readonly关键字只能在字段上面使用
public readonly TcpClient client;
不能在类,方法,属性上面使用readonly!!
顺便看了一下readonly和const的区别:

readonly和const都是用来标识常量的。

const可用于修饰class的field或者一个局部变量(local variable);而readonly仅仅用于修饰class的field。

const常量的值必定在编译时就已明确并且恒定的;而readonly常量却有一点不同,那就是其值可以在运行时编译,当然,它也必须遵守作为常量的约束,那就是值必须恒定不变。

const常量必须在声明的同时对其进行赋值,并且确保该值在编译时可确定并恒定;而readonly常量则可以根据情况选择在声明的同时对其赋予一个编译时确定并恒定的值,或者将其值的初始化工作交给实例构造函数(instant constructor)完成。如:public readonly string m_Now = DateTime.Now.ToString();,m_Now会随着运行时实际情况变化而变化。

const常量属于类级别(class level)而不是实例对象级别(instant object level),并且它不能跟static结合一起使用,该常量的值将由整个类的所有实例对象共同分享(详细论述参见后面的Remark区域)。

readonly常量既可以是类级别也可以是实例对象级别的,这取决于它的声明以及初始化工作怎么实施。readonly可以与static结合使用,用于指定该常量属于类级别,并且把初始化工作交由静态构造函数(static constructor)完成(有关如何把readonly常量声明为类级别或实例对象级别的论述清参见后面的Remark区域)。

能被const修饰声明为常量的类型必须是以下的基元类型(primitive type):sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,float,bool,decimal,string。

object,数组(Array)和结构(struct)不能被声明为const常量。

一般情况下,引用类型是不能被声明为const常量的,不过有一个例外:string。该引用类型const常量的值可以有两种情况,string或null。其实,string虽然是引用类型,但是.NET却对它特别处理,这种处理叫做字符串恒定性(immutable),使得string的值具有只读特性。

转载于:https://www.cnblogs.com/Veakey/archive/2012/07/13/2590538.html

Readonly 与Const相关推荐

  1. readonly和const的区别

    readonly与const的区别 1.const常量在声明的同时必须赋值,readonly在声明时可以不赋值 2.readonly只能在声明时或在构造方法中赋值(readonly的成员变量可以根据调 ...

  2. C# static readonly 与 const 的区别

    static readonly 与 const 的区别: const 表达式的值是在编译时形成的: static readonly 表达式的值直到程序运行时才形成: 转载于:https://www.c ...

  3. readonly和const比较

    readonly和const比较 前天犯了个低级错误,是关于readonly的,总结了一下: C#的readonly关键字只能在字段上面使用 public readonly TcpClient cli ...

  4. C#中的static、readonly与const的比较

    C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景. 工作原理     readonly为运行时常量,程序运 ...

  5. readonly 与 const 区别

    今天遇到一道面试题,const和readonly区别,我答得有些糊涂,在msdn上查找了下,msdn解释如下: readonly 关键字与 const 关键字不同.const 字段只能在该字段的声明中 ...

  6. readonly 与 const

    readonly MSDN定义:readonly 关键字是可以在字段上使用的修饰符.当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数 ...

  7. C# Readonly和Const的区别

    什么是静态常量(Const)和动态常量(Readonly) 先解释下什么是静态常量(Const)以及什么是动态常量(Readonly). 静态常量(Const)是指编译器在编译时候会对常量进行解析,并 ...

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

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

  9. const和static readonly 区别

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

最新文章

  1. 错误:因为相同类型的其他实体已具有相同的主键值。在使用 Attach 方法或者将实体的状态设置为 Unchanged 或 Modified 解决方法...
  2. HarmonyOS之基础环境和应用开发流程
  3. 模拟退火求解TSP问题
  4. php安装编译时 configure: error: Cannot find OpenSSL's evp.h
  5. 2016年学习Linux决心书(老男孩教育在线课程班第二期)
  6. 分布式搜索elasticsearch集群监控工具bigdesk
  7. java 多线程 关键字_java多线程基础(synchronize关键字)
  8. uniapp打包安装后提示_本应用使用HBuilderX 2.8.12 或对应的cli版本编译,而手机端SDK版本是2.8.13---基于Vue的uniapp手机端_前端UI_uview工作笔记007
  9. mysql介质故障_pciessd异常readonly致mysql反复crash
  10. caf格式 android,实例:Android Studio3+版本 获取存有ANR信息的traces.txt文件,解决ANR问题...
  11. 数据库基础之14(MongoDB基本数据类型,数据导入导出,数据备份与恢复)
  12. mysql查看mylog命令_mysql 日志查询(查看mysql日志命令)
  13. Laravel文档梳理7、视图
  14. 单播、广播和多播IP地址
  15. pmp项目管理师证书有什么用?
  16. 手机usb外接摄像头 diy红外夜视仪
  17. 六、阻塞队列与源码分析(上)
  18. vue项目如何部署?布署服务器后刷新404如何解决?
  19. eclipse Build Automatically在哪里
  20. sublime php 代码校验,Sublime Text下配置SublimeLinter进行PHP代码检查

热门文章

  1. 李洋疯狂C语言之用递归解决李白喝酒问题(附填空题解法)
  2. Firefox 66回归!修复多项臭虫相关问题
  3. “90后”台湾籍乘务长的第一个大陆春运
  4. 局域网内连接MySQL
  5. 关于ORACLE 语句中,IN 超过1000个的解决方法
  6. 需求分析的图形工具(层次方框 warnier IPO)
  7. r语言做断轴_R语言用nls做非线性回归以及函数模型的参数估计
  8. 清华大学《操作系统》(七):虚拟存储、覆盖、交换
  9. java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚
  10. python3.7知识点汇总