const与readonly常量

const与readonly都是用来定义常量,但是它们有什么区别呢?

下面我们来简要的说明一下:

const修饰的常量是编译时常量,如:public const String PI=3.1415;什么是编译时常量,通俗来讲就是指你在声明时,必须要进行赋值(也就是初始化),如果不赋值,编译时会出现说“常量字段要求提供一个值”的异常。

readonly修饰的是运行时常量,可以在声明中赋值,也可以在构造函数中赋值(注意只能在这两个地方赋值)。

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html(这里转载这篇文章),文章中讲的很透彻,但是还是想用自己的话,来更加通俗的描述一遍。

C#语言中有两种不同的常量类型,也就是静态常量和动态常量,静态常量是指编译器先对常量进行解析,并将常量的值替换成初始化的那个值(也就是指编译器会传播常量)。例如下面的代码:

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

控制台中输出的是A is 100,B is 10,也就是正是上面讲到的先对常量进行解析,然后替换初始化的值。

动态常量是指常量的值在运行的那一个刻才获得,程序在编译期间并未对常量进行解析,所以开始执行时都是默认值,如果是int类型的就是默认为0.如下面的代码:

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

控制台中输出的是A is 0,B is 10.

const与readonly有什么相同的作用呢?

那就是确保两者修饰的常量字段或者是常量局部变量,在后续的项目中不会由于编码操作失误而修改一些固定的值。当然如果是一些常常修改的值就不要用const或者是readonly来修饰了。

时间: 2024-10-09 23:06:58

const与readonly常量的相关文章

[c#] const 与 readonly

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

const和readonly

const:常量,编译时即需要确定值 readonly:只读变量,运行时确定值 1 class ConstReadonlyTest 2 { 3 //const String str;//错误:常量字段定义时需要指定初始值 4 //const Object obj = new Object();//错误:常量字段不能使用new初始化,表达式必须是常量(字符串可以) 5 //const Object obj = new StructTest();//错误:表达式必须是常量不能使用new初始化(即使是

const,readonly,static

1.const 表示的是常量(constant),始终不会发生改变,在编译时就确定了.所以类中定义一个常量可以被类访问也可以被类的实例访问.定义时就不能和static一起用.如果用了也是没有作用的,所以语法就规定其是无效的.在声明时同时初期化. private const string Name="abc"; 2.readonly 值在运行期决定,有一次确定其值的机会.其是可以被类访问还是类的实例访问,就看static.可以和static一起使用,这与一般数据成员一样.可以在两类地方赋

C#庖丁解牛之const与readonly

一.const与readonly的争议 你一定写过const,也一定用过readonly,但说起两者的区别,并说出何时用const,何时用readonly,你是否能清晰有条理地说出个一二三? const与readonly之所以有如此争议,是因为彼此都存在"不可改变"这一特性,对于二者而言,我们需要关心的是,什么时候开始不可变?什么是不可改变的?这就引出了我们下面要讨论的话题. 二.什么时候开始不可变? 我们先抛出结论. const在程序运行的任何时候都是不可变的,无论什么时候开始,什么

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

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

【.Net姿势随记】const 与 readonly 初始化姿势

using System; class P {     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);     } } 对于上述代码,输出结果是多少?很多人会认为是A is 100,B is 10吧!其实,正确的

const和readonly你真的懂吗?

第二遍文章我打算把const和readonly的区别拿出来讲下,因为写代码这么久我都还没搞清楚这两者的区别,实在有点惭愧,所以这一次我打算搞清楚它. 定义 来看看MSDN的解释: readonly:readonly关键字是可以在字段上使用的修饰符.当字段声明包括readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分,或者出现在同一类的构造函数中. const:使用 const 关键字来声明某个常量字段或常量局部变量. 常量字段和常量局部变量不是变量并且不能修改. 太多理论的讲解有些人

C#基础 const和readonly关键字

静态常量 所谓静态常量就是在编译期间会对变量进行解析,再将常量的值替换成初始化的值.动态常量 所谓动态常量就是编译期间会将变量标记只读常量,而不用常量的值代替,这样在声明时可以不初始化,可以延迟到构造函数初始化. const和readonly 区别 const修饰的常量是上述中的第一种,即静态常量,而readonly是上述中第二种即动态常量.他们的区别可以从静态常量和动态常量的特性来说明:const修饰的常量在声明时必须初始化值:readonly修饰的常量可以不初始化值,且可以延迟到构造函数.c

const和readonly差别

我们都知道,const和static readonly的确非常像:通过类名而不是对象名进行訪问,在程序中仅仅读等等.在多数情况下能够混用.二者本质的差别在于,const的值是在编译期间确定的,因此仅仅能在声明时通过常量表达式指定其值.而static readonly是在执行时计算出其值的,所以还能够通过静态构造函数来赋值.明确了这个本质差别,我们就不难看出以下的语句中static readonly和const是否能互换了: 1. static readonly MyClass myins = n