总结一下const和readonly有这么几条区别:

  1. const和readonly的值一旦初始化则都不再可以改写;
  2. const只能在声明时初始化;readonly既可以在声明时初始化也可以在构造器中初始化;
  3. const隐含static,不可以再写static const;readonly则不默认static,如需要可以写static readonly;
  4. const是编译期静态解析的常量(因此其表达式必须在编译时就可以求值);readonly则是运行期动态解析的量;
  5. const既可用来修饰类中的成员,也可修饰函数体内的局部变量;radonly只可以用于修饰类中的成员

在许多教程中常看到列出了两者之间的区别
  const 
       (1)在编译期间解析常量
       (2)必须在申明时就初始化
       (3)即可用来修饰类中的成员,也可用来修饰函数中的局部变量
  static readonly
      (1)在运行期间解析常量
      (2)即可在申明时初始化,也可在构造器中初始化
      (3)只可用来修饰类中的成员

从上面的区别看似乎也很明白,可是在实际的使用中还是不太好把握。在c#中有两种不同的常量:
静态常量(compile-time constants) 和动态常量(runtime constants),他们之间有不同的特性,错误的使用不仅会损失效率,
还可能造成错误。相比之下,静态常量在速度上会稍快写,但是灵活性却比动态常量差。

从我个人对他们的使用中总结出有如下三点需要注意:
(1)当使用new来初始化一个常量,不管他是值类型,还是引用类型都只能使用static readonly

Code
static readonly MyClass myclass=new MyClass();
//这样是错误的
public const DateTime myDateTime=new DateTime(,,,,,);
//这样是正确的
public static readonly DateTime myDateTime=new DateTime(,,,,,);

(2) 比较编译时和运行时他们之间的区别

static readonly A=B*;
static readonly B=;
//在编译的时候B并没有被编译为10,A也没有被编译为200
const A=B*
const B=
//显然在编译的时候,就把B编译为10,A编译为200了,而不是在运行时计算B*20

(3)在不同的项目中使用const和static readonly的区别

Code
 1//下面有一个项目
 2public class OneClass
 3{
 4 public const int myInt=;
 5 public static readonly string strStaticReadonly="StaticReadonly";
 6}
 7//在另一个项目中引用了上述属性
 8public class AnotherClass
 9{
int i=OneClass.myInt;
string ss=OneClass.strStaticReadonly;
}
//编译时运行程,i=5;ss="StaticReadonly",这是理所当然的,但是我们如过了OneClass中的值
public class OneClass
{
 public const int myInt=;
 public static readonly string strStaticReadonly="Changed";
}
//然后编译OneClass项目,生成DLL,运行AnotherClass(只是运行,并不是编译后运行,发现结果是:
//i=5不变,但是ss=“changed”,为什么会这样,原因是在AnotherClass中,i已经被定义为5了,而不是运行时再去取dll的值,所以说const在编译时就确定了。

Const和ReadOnly的更多相关文章

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

    前言 不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量. 静态常量 所谓静态常量就是在编译期间会对变量 ...

  2. const 与 readonly知多少

    原文地址: http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你cons ...

  3. [c#基础]关于const和readonly常见的笔试题剖析

    引言 有那么几天没更新博客了,发现到了不得不写的地步,总是有那么个声音在强迫自己,虽然工作很累,但是有些东西不写出来,不能原谅自己.今天为什么总结这两个关键字的区别,总觉得这两个关键字的用法用的太习惯 ...

  4. const 和 readonly

    const 和 readonly 的异同 Const readonly 字面意 不变常量,不可修改 只读操作,不可写 初始化 必须在声明的同时赋值 可在声明和构造方法中进行赋值 所属关系 类.即sta ...

  5. C#夯实基础系列之const与readonly

    一.const与readonly的争议       你一定写过const,也一定用过readonly,但说起两者的区别,并说出何时用const,何时用readonly,你是否能清晰有条理地说出个一二三 ...

  6. 读书笔记:const和readonly、static readonly 那些事

    C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...

  7. const和readonly区别

    内容来源<<你必须知道的.NET>>(转载) 标题:什么才是不变:const和readonly 内容: const:用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌 ...

  8. [转]const 与 readonly知多少

    引自:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你const与r ...

  9. const与readonly深度分析(.NET)

    前言 很多.NET的初学者对const和readonly的使用很模糊,本文就const和readonly做一下深度分析,包括: 1. const数据类型的优势 2. const数据类型的劣势 3. r ...

  10. [c#] const 与 readonly

    c# 中 const 与 readonly 关键字看似相同,实则不同.重点在于确定值的时间. const const 很简单,就是一个常量,不可以被 static 修饰,因为被 const 修饰的字段 ...

随机推荐

  1. Spring的applicationContext.xml文件

    以下是详解Spring的applicationContext.xml文件代码:<!-- 头文件,主要注意一下编码 --><?xml version="1.0" e ...

  2. MyEclipse6.5安装SVN插件的三种方法z

    一.安装方法: 方法一.如果可以上网可在线安装   . 打开Myeclipse,在菜单栏中选择Help→Software Updates→Find and Install;   . 选择Search ...

  3. 几种交换两个数函数(swap函数)的写法和解析

    #include <iostream> using namespace std; /*值传递,局部变量a和b的值确实在调用swap0时变化了,当结束时,他们绳命周期结束*/ void sw ...

  4. 【CF】220B Little Elephant and Array

    区间动态统计的好题. /* */ #include <iostream> #include <string> #include <map> #include < ...

  5. This configuration file was broken by system-config-keyboard

    posts • Page of problem with startx Postby evarie » // :: Normally i can get started with the x wind ...

  6. 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性

    初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...

  7. 窥探Unity5渲染内部之解析UnityShaderVariables.cginc

    unity5的UnityShaderVariables.cginc比unity4大了1kb这里装着unity shader 大部分内部参数,写这个方便以后自己查询 Camera参数 uniform f ...

  8. unity3d ppsspp模拟器中的post processing shader在unity中使用

    这个位置可以看到ppsspp的特殊处理文件位置来看看这些特效 用来测试的未加特效图片 ppsspp: 传说系列一生爱---英杰传说 最后的战士 aacolor 是关于饱和度,亮度,对比度,色调的调节, ...

  9. java 解析xml文件案例

    package xmlTest; import javax.xml.parsers.*; import org.w3c.dom.*; public class GetXml { public stat ...

  10. 365. Water and Jug Problem

    莫名奇妙找了个奇怪的规律. 每次用大的减小的,然后差值和小的再减,减减减减减减到差值=0为止.(较小的数 和 差值 相等为止,这么说更确切) 然后看能不能整除就行了. 有些特殊情况. 看答案是用GCD ...