C#中 const 和 readonly 的不同

 更新时间:2020年6月25日 11:42  点击:2280

  const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。


readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。


readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。
   readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
   readonly可以是任何类型

* 需要注意的一个问题是:

对于一个 readonly 的 Reference 类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。

复制代码 代码如下:

public static readonly Class1 my = new Class1();

my.SomeProperty = 10;//正常
my = new Class1(); //出错,该对象是只读的

但是,如果上例中的 Class1 不是一个 Class 而是一个 struct,那么后面的两个语句就都会出错。

static readonly:

Java 中 static 是当载入一个类时执行一次的。

C#中是怎么执行的,我没有查到。很奇怪几乎每本java的书都会说static的问题,C#的往往只说怎么用,但是应该是在main函数调用之前初始化,所以static readonly也是运行时的,可以用变量付值,如:

private static readonly string path = System.Windows.Forms.Application.StartupPath + “aaa”;

[!--infotagslink--]

相关文章

  • C++类中的static和const用法实例教程

    这篇文章主要介绍了C++类中的static和const用法,是C++面向对象程序设计中非常重要的概念,需要的朋友可以参考下...2020-04-25
  • C#中const用法详解

    这篇文章主要介绍了C#中const用法,实例分析了C#中const的用法及使用技巧,并对比分析了readonly关键字与const关键字的不同,需要的朋友可以参考下...2020-06-25
  • .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法

    当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下...2021-09-22
  • c#.net中const和readonly的区别

    readonly修饰符用来表示只读,const用来表示不变常量。顾名思义,只读表示不能进行写操作;不变常量不能被修改。这两者到底有什么区别呢...2021-09-22
  • C#中const 和 readonly 修饰符的用法详解

    这篇文章主要介绍了C#中const 和 readonly 修饰符的用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#中 const 和 readonly 的不同

    const 和 readonly 的区别,总是不太清楚,于是查了查资料。...2020-06-25
  • 解析C语言中如何正确使用const

    本篇文章是对C语言中如何正确使用const,进行了详细的分析介绍。需要的朋友参考下...2020-04-25
  • C++ const关键字分析详解

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性。这篇文章主要介绍了C/C++ 中const关键字的用法,需要的朋友可以参考下...2021-08-29
  • ASP.NET中readonly与const的区别详解

    如果你学过ASP.NET理论知识都会知道,在ASP.NET中 readonly和const修饰的变量都是恒量,它们的值是不可以被修改的。但是他们之间到底有什么区别?下面小编就它们的区别用例子来进行说明。...2021-09-22
  • c++ 尽量不要使用#define 而是用const、enum、inline替换。

    为什么这么说呢?或许很多程序员已经习惯在文件开始使用大量的#define语句...2020-04-25
  • C++中const的用法详细总结

    以下是对C++中const的用法进行了详细的总结分析,需要的朋友可以过来参考下,希望对大家有所帮助...2020-04-25
  • C语言 volatile与const同时使用应注意的问题

    “volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。因此,它们本来就不是矛盾的...2020-04-25
  • php get_defined_constants 函数

    php get_defined_constants 函数 get_defined_constants ( PHP 4中“ = 4.1.0 , PHP 5中) get_defined_constants -返回一个关联数组的名字所有的常量和...2016-11-25
  • C# 中const,readonly,static的使用小结

    这篇文章主要介绍了C# 中使用const,readonly,static的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-26
  • C++中const用法小结

    C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。...2020-04-25
  • C语言中const,volatile,restrict的用法总结

    以下是对C语言中const,volatile,restrict的用法进行了详细的总结介绍,需要的朋友可以过来参考下...2020-04-25
  • 详解C++中的const关键字及与C语言中const的区别

    这篇文章主要介绍了C++中的const关键字及与C语言中const的区别,const将所修饰的变量对象转化为常量,需要的朋友可以参考下...2020-04-25
  • 深入探讨C#中的const、readonly关键字

    这篇文章主要介绍了深入探讨C#中的const、readonly关键字,本文可以帮助你深刻理解这两个关键字,而且是面试中最可能面试到的问题哦,需要的朋友可以参考下...2020-06-25
  • Define,const,static用法总结

    const定义的全局数据变量,其基本作用和define相同,但又在define的基础上增加了好多功能...2020-04-25
  • C#基础:基于const与readonly的深入研究

    本篇文章是对c#中const与readonly进行了详细的分析介绍,需要的朋友参考下...2020-06-25