zoukankan      html  css  js  c++  java
  • 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)

            {
                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();
  • 相关阅读:
    转:选择学习“下一个”程序语言
    再谈 Web 字体的现状与未来
    堪称2008年最漂亮的50组图标(上)
    堪称2008年最漂亮的50组图标(下)
    回帖整理: 互联网的未来, 我们的未来, 算一个预告吧, 有空我会把这些观点一一展开
    [回帖整理]创业建议
    也论PageController/FrontController与MVC
    [回帖整理] 创业难
    是否非要用interface关键字来实现接口?
    又论社区风气, 与程序员是干嘛地的.
  • 原文地址:https://www.cnblogs.com/jimcsharp/p/3628114.html
Copyright © 2011-2022 走看看