readonly和const比较

前天犯了个低级错误,是关于readonly的,总结了一下:
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的值具有只读特性。有关字符串恒定性的内容,可以参考《Microsoft .NET框架程序设计(修订版)》。

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

  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. 【Netty】入门Netty官方例子解析(一)写个 Discard Server
  2. 2048c语言程序,C语言实现2048小游戏
  3. javascript定时器及Date对象
  4. DAGNN:有向无环图神经网络
  5. zcmu-1184(矩阵乘法)
  6. Angular view container删除view实例的过程
  7. 高等数学下-赵立军-北京大学出版社-题解-练习12.1
  8. java stream filter map collector使用
  9. python insert_Python列表| 带示例的insert()方法
  10. 判断小写字母 php,php中怎样推断字母是大写照样小写_后端开发
  11. 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
  12. java request.getparameter为何能取值_request.getParameter(“xxx”)的参数的取值
  13. java拦截器_Java拦截器实现
  14. Java实现zip文件压缩与解压缩--附完整代码
  15. 坑多路难走,学数据分析转行前要知道培训机构不会说的事情
  16. php 微信支付V3接口
  17. 物价上涨 下馆子点菜的省钱办法
  18. 1-2 移动均线交叉策略1
  19. 计算机软件可以授予专利权吗,软件产品能申请专利吗?
  20. 微软云Centos byobu安装

热门文章

  1. java输入做参数需要close吗_JAX-RS和java.time.LocalDate作为输入参数
  2. python pexpect模块详解_python pexpect模块
  3. 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
  4. 信息学奥赛一本通(2025:【例4.11】体操队)
  5. Almost Arithmetic Progression(CF-978D)
  6. 信息学奥赛C++语言: 输出最大值
  7. 信息学奥赛一本通C++语言——1009:带余除法
  8. 8 QM配置-质量计划配置-维护检验计划的号码范围
  9. POCO C++ Libraies介绍及常见用法
  10. Docker 镜像使用(拉取、查看、使用、删除)