C#基础 const和readonly关键字

静态常量

  所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值。
动态常量
  所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造函数初始化。

const和readonly 区别

const修饰的常量是上述中的第一种,即静态常量,而readonly是上述中第二种即动态常量。他们的区别可以从静态常量和动态常量的特性来说明:
const修饰的常量在声明时必须初始化值;readonly修饰的常量可以不初始化值,且可以延迟到构造函数。
cons修饰的常量在编译期间会被解析,并将常量的值替换成初始化的值;而readonly延迟到运行的时候。
const修饰的常量注重的是效率;readonly修饰的常量注重灵活。
const修饰的常量没有内存消耗;readonly因为需要保存常量,所以有内存消耗。
const只能修饰基元类型、枚举类、或者字符串类型;readonly却没有这个限制。

注意:

1.如果我们在const修饰的常量前加static的话,会提示错误,因为const编译后就是static常量了。(PM:如果不编译的话,编辑器不会报错。编译后,再提示错误! )
2. readonly修饰的在构造函数中被赋值后就不可以改变。

3.

class Program
{
static readonly int A = B * 10;
static readonly int B = 10;
public static void Main(string[] args)
{
Console.WriteLine("A is {0},B is {1} ", A, B);
Console.ReadLine();
}
}

--输出:A is 0,B is 10

readonly是动态常量,在编译期间是不会解析的,所以开始就是默认值, A和B都是int类型,值都是0,所以A=0*10=0,程序接着执行到B=10,才会真正的B的初值10赋给B。

时间: 2024-08-08 13:51:09

C#基础 const和readonly关键字的相关文章

C#基础知识七之const和readonly关键字

前言 不知道大家对const和readonly关键字两者的区别了解多少,之前真不是很清楚,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态变量和动态变量. 静态变量 所谓静态变量就是在编译期间会对变量进行解析,再讲常量的值替换成初始化的值.定义时必须初始化. 动态变量 所谓动态变量就是编译期间会将变量标示只读常量,而不用常量的值代替,定义时可以不初始化,可以延迟到构造函数. const和readonly

深入探讨C#中的const、readonly关键字

首先不可否认,这些在面试上会经常被面试官问起,但是你回答的让面试官满意吗?当然如果你知道了这些原理,或许你就不 怕了.既然说到了原理,我们还是从MSDN说起. 一:值得推敲的几个地方 1.先来看看msdn上面对const是怎么说的,我们会看到.不能修改,编译时常量这些关键性信息. Q:  const为什么不能被修改. A:这个很简单,很多教科书上面都说,当编译器编译时,会将常量的值保存在该程序集的元数据中,下面我们做个实例 看一看. ①:新建一个projectA. 代码如下: // Projec

c# const与readonly 关键字的比较

C#中,const 与readonly是两个比较有用的关键字.const 与 readonly 定义的数据成员在初始化都不能再改变. 比如定义了public class MathUtitlity    {        public const double PI = 3.14;        public readonly double E = 2.782; } class Program {        static void Main(string[] args) {          

[c#] const 与 readonly

c# 中 const 与 readonly 关键字看似相同,实则不同.重点在于确定值的时间. const const 很简单,就是一个常量,不可以被 static 修饰,因为被 const 修饰的字段自动成为静态字段,其值是在编译时可以确定的. readonly readonly 可以修饰实例字段(不被 static 修饰的字段),也可以修饰静态字段(被 static 修饰的字段).意指为"只读".其值确定的时间在类的构造函数中. 总结 关键字 确定值的时机 const 编译时 rea

七问C#关键字const和readonly

const和readonly经常被用来修饰类的字段,两者有何异同呢? const 1.声明const类型变量一定要赋初值吗? --一定要赋初值 public class Student { public const int age; } 生成的时候,会报如下错: 正确的应该这样写: public class Student { public const int age = 18; } 2.声明const类型变量可以用static修饰吗? --不可以 public class Student {

c# const, static 和readonly关键字的理解

关于c#的const, static, readyonly关键字修饰成员变量时的区别,下面通过一个简单的例子来说明: 1 //SomeType.cs 2 3 using System; 4 5 public sealed class SomeType 6 { 7 public Int32 Id = 1; 8 9 public const Int32 constId = 100; //IL .field public static literal int32 constId = int32(0x0

C#关键字 const与readonly

====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成员类型.常量局部变量或常量字段的初始值设定项必须是一个可以隐式转换为目标类型的常量表达式. 常数表达式是编译时可被完全计算的表达式.因此,对于引用类型的常数,可能的值只能是string和null. 不允许在常数声明中使用static修饰符. ====readonly==== readonly关键字是

const & readonly 关键字

1.使用 const 关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量并且不能修改. 常量可以为数字.布尔值.字符串或 null 引用(Constants can be numbers, Boolean values, strings, or a null reference). 2.不允许在常数声明中使用 static 修饰符. 3.常数可以参与常数表达式,如下所示: 4.readonly 关键字与 const 关键字不同:const 字段只能在该字段的声明中初始化.re

【Unity|C#】基础篇(6)——const、readonly、static readonly

[学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/1mhOmBG0 [内容] const readonly static readonly 三者比较 [笔记] const 编译时常量 类的常量 只能在声明时赋值 readonly 运行时常量 对象的常量 可以在 声明时 赋值(与常量一样),或 构造函数中 赋值 static readonly 运行时