readonly与const

在C#中,readonly 与 const 都是定义常量,但不同之处在于:readonly 是运行时常量,而 const 是编译时常量。

public const int intValue = ;

public void Test()
{
Console.WriteLine(intValue*);
}

在上面的代码中, intValue是一个int类型的常量并且用100来初始化它,即 intValue 就是100,编译器会在编译时用100来替换程序中的intValue。

class Test
{
public readonly Object _readOnly; public Test()
{
_readOnly=new Object(); //right
} public void ChangeObject()
{
_readOnly=new Object(); //compliler error
}
}

使用readonly将 _readOnly变量标记为只读(常量),这里表示的是这个变量是常量,而不是指它所指向的对象是常量(看下面的代码)。而且它不同于const在编译时就已经确定了绑定对象,他是在运行时根据需求动态实现的,就如上面的代码,_readOnly就是在构造函数内被初始化的,即可以通过构造函数来为_readOnly指定不同的初始值。而一旦这个值指定的了之后在运行过程中就不能再更改。

class Person
{
public int Age{get;set;}
} class Test
{
private readonly Person _readOnly;
private readonly int _intValue; public Test()
{
_readOnly=new Person();
_intValue=;
} public Test(int age,int value)
{
_readOnly=new Person(){ Age=age;}
_intValue=value;
} public void ChangeAge(int age)
{
_readOnly.Age=age;
} public void ChangeValue(int value)
{
_intValue=value; //comppiler error
} public int GetAge()
{
return _readOnly.Age;
} public int GetValue()
{
return _intValue;
} public static void Main()
{
Test testOne=new Test();
Test testTwo=new Test(,); Console.WriteLine("testOne: "+testOne.GetAge()+" "+testOne.GetValue());
Console.WriteLine("testTwo: "+testTwo.GetAge()+" "+testTwo.GetValue()); testOne.ChangeAge();
testTwo.ChangeValue();
Console.WriteLine(testOne.GetAge());
Console.WriteLine(testTwo.GetValue());
}
}

readonly 与 const 最大的区别在于readonly 是运行时绑定,而且可以定义对象常量,而 const 只能定义值类型(如int)的常量。

readonly与const的更多相关文章

  1. 我所理解的readonly和const

    最近要给学校软件小组新成员讲几次课,所以把很多以前懒得学习的和模糊不清的知识点,重新学习了一下. MSDN是这样解释的: readonly 关键字与 const 关键字不同. const 字段只能在该 ...

  2. 配置文件App.config的使用以及Readonly与Const的对比

    以前我们学习的时候都把连接数据库的连接字符串写在一个类中,因为我们的数据库都在自己电脑上.如果更换数据库地址,需要更改这个类,然后重新编译才可以连接到数据库.现在我们需要将连接字符串当道一个文件中,然 ...

  3. Readonly与const初识

    对于readonly和const,很多人无法具体区分,不清楚它们的具体使用场合:现在我们分析它们之间的区别和使用场合. const是一个编译期常量:const只能用于修饰基元类型.枚举类型或者字符串类 ...

  4. Usage of readonly and const

    Many new learners can not make sure the usage scenarios of readonly and const keywords. In my opinio ...

  5. readonly和const的区别

    readonly与const的区别1.const常量在声明的同时必须赋值,readonly在声明时可以不赋值2.readonly只能在声明时或在构造方法中赋值(readonly的成员变量可以根据调用不 ...

  6. c#:readonly与const的区别

    readonly与const的区别: 1.初始化:const  字段只能在该字段的声明中初始化. readonly  字段可以在声明或构造函数中初始化. 2.值: const 字段是编译时常量(con ...

  7. C#中的readonly跟const用法小结

    总结一下常量和只读字段的区别: 由来: 笔者也是在看欧立奇版的<.Net 程序员面试宝典>的时候,才发现自己长久以来竟然在弄不清出两者的情况下,混用了这么长的时间.的确,const与rea ...

  8. [C#] readonly vs const

    C#中的readonly和const两个关键字都可以用来定义系统变量,那两者之间有什么区别呢? 1. const变量赋值后,就不可以对其进行修改.且在定义时就需要给它赋值,使用const修饰的变量是s ...

  9. 编写高质量代码改善C#程序的157个建议——建议6: 区别readonly和const的使用方法

    建议6: 区别readonly和const的使用方法 很多初学者分不清readonly和const的使用场合.在我看来,要使用const的理由只有一个,那就是效率.但是,在大部分应用情况下, “效率” ...

随机推荐

  1. 最全面的jdbcUtils,总有一种适合你

    附加jar包,TxQueryRunner.java文件,dbconfig.properties配置文件(点击链接下载): http://files.cnblogs.com/files/xiaoming ...

  2. PHP异常与错误处理机制

    先区别一下php中错误 与 异常的概念吧 PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况.平时遇到的warming.notice ...

  3. VS2010中重命名项目

    通常,在项目开发初始,一般都是先做一个Demo,以方便进行修改设计.演示等,这可能导致项目命名并不符合最后的规范,则需要修改项目名称.VS没有推出这方面针对性的功能,网友们也纷纷自己写了软件. 方案一 ...

  4. Android Studio用release模式进行调试

    有时候调试SDK必须要用release版本,但是每次打包混淆太麻烦,希望能在IDE中直接跑出release版本的应用,简单来说就是在debug模式下产生release版本的app,这时候该怎么做呢?当 ...

  5. android 打包错误

    打包时报如下错误: Export aborted because fatal lint errors were found. These are listed in the Lint View. Ei ...

  6. WPF x名称空间

    X是映射XML名称空间时给他取的名字.X名称空间里面的成员是专门给XAML编译器看的.用来引导XAML编译器把XAML代码编译成CLR代码的,他是取的XAML的首字母X. XAML有自己的编译器,会吧 ...

  7. 二维码扫描利用ZBar实现

    上次是根据系统的属性自己封装的一个二维码扫描,这次给大家介绍一下基于ZBar集成的类似于QQ二维码扫描界面的二维码扫描的效果.                                     ...

  8. select_tag 选择后自动提交,并且保持选择的项

    使用select来选择,,,选择就响应真是花了好大的功夫....你妹...在controller设置变量来储存选择后的值...js中如果select选择为空那么传入的值是””而不是null selec ...

  9. 阶乘 求n!中质因数的个数

    在n!中末尾有几个0 取决于n!中5的个数(2肯定比5多) 所以遍历从1到n的数,看总共有几个5即可 ..N do j = i; == ) ++ret; j /= ; end end 有个nb的方法: ...

  10. Effective Java 26 Favor generic types

    Use generic types to replace the object declaration Add one or more type parameters to its declarati ...