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)

{
           
MathUtitlity math = new MathUtitlity();
           
math.E = 2.5;//编译错误,不能改变已经初始化的readonly字段
           
MathUtitlity.PI = 3.1456;//编译错误,不能改变已经初始化的const 字段
       
}

二者有什么区别呢?

1.定义为const的数据成员,隐式包含了static的含义,而定义为readonly的数据成为没有包含static的含义,比如可以在类级别直接调用const字段,而不能直接调用生命为readonly字段

比如上面可以

Console.WriteLine(MathUtitlity.PI); //使用正确

Console.WriteLine(MathUtitlity.E);//编译错误,不能在类级别直接调用readonly成员,若想直接这样调用,可以加上static
关键字,如下

public  static readonly double E =
2.782;//现在可以MathUtitlity.E了

2.const成员在定义时,必须初始化,不能通过构造函数为其初始化。也即是说const成员的值必须的编译时就知道,而不能在运行时赋值。而readonly的成员,如果在定义时没有初始化,那么可以在构造函数中进行初始化。比如

public class MathUtitlity1

{

public readonly double E;

public MathUtitlity1()

{

E = 2.732;

}

public double GetValueE()

{

return E;

}

}

然后可以这样调用

MathUtitlity1 m1 = new MathUtitlity1();

c# const与readonly 关键字的比较的更多相关文章

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

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

  2. C#基础知识系列八(const和readonly关键字)

    前言 不知道大家对const和readonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下.在了解这两个关键字的时候我们先来了 ...

  3. const和readonly关键字

    不知道大家对const和readonly这两个关键字的区别有什么了解,原来自己之前还真不清楚它们到底是怎么回事,那么如果你也不是很清楚的话,可以一起来探讨一下.在了解这两个关键字的时候我们先来了解一下 ...

  4. C#基础 const和readonly关键字

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

  5. [c#] const 与 readonly

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

  6. C#关键字 const与readonly

    ====const==== const关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量而且不能修改.常量可以为数字.布尔值.字符串或null引用. 常数声明的类型指定声明引入的成 ...

  7. C# 关键字const与readonly的区别

    尽管你写了很多年的C#的代码,但是可能当别人问到你const与readonly的区别时候,还是会小小的愣一会吧~ 笔者也是在看欧立奇版的<.Net 程序员面试宝典>的时候,才发现自己长久以 ...

  8. 七问C#关键字const和readonly

    const和readonly经常被用来修饰类的字段,两者有何异同呢? const 1.声明const类型变量一定要赋初值吗? --一定要赋初值 public class Student { publi ...

  9. const 与 readonly知多少

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

随机推荐

  1. jQuery表格操作

    $("#tableid tr:gt(0)").each(function(i){ $(this).children("td").each(function(j) ...

  2. form 表单 action 参数 接收不了

    <form method="get" action="/test/index.php?mod=123456" > <input type=&q ...

  3. cocos2d-x使用DragonBones动画

    前言 在网上查找关于DragonBones在cocos2d-x的使用教程,找了大半天也没有找到一个有用的.在自己摸索了一段时间终于摸索了出来,在这里记下分享给大家. 下载DragonBones 我这里 ...

  4. python中的gil是什么?

    1.gil是什么? 在Python源代码:Python-2.7.10/Python/ceval.c.我看到的Python源代码版本为2.7.10 static PyThread_type_lock i ...

  5. 深入理解Python中的生成器

    生成器(generator)概念 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束. 生成器语法 生成器表达式: 通列表解 ...

  6. 【收集整理】Linux下的目录讲解

    Linux下的目录介绍:在Linux系统中,一切东西都是存放在一个唯一的“虚拟文件系统”中的,这个“虚拟文件系统”是树状的结构以一个根目录开始.以文件来表示所有逻辑实体和非逻辑实体,逻辑实体指文件和目 ...

  7. Python3 列表

    list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> clas ...

  8. [转载]5分钟了解Mockito

    原文链接: http://liuzhijun.iteye.com/blog/1512780/ 5分钟了解Mockito 博客分类: Open SourceJava 一.什么是mock测试,什么是moc ...

  9. Spring Cloud Eureka Server例子程序

    Spring-Cloud-Eureka-Server 及Client 例子程序 参考源代码:https://github.com/spring-cloud-samples/eureka 可以启动成功, ...

  10. hadoop1中mapreduce原理详解

    剖析Mapreduce作业运行机制:原理如下图: 原理图的解释的可以分为以下几个部分 1.客户端提交一个mapreduce的jar包给JobClient 2.JocClient通过RPC和JobTra ...