const 与readonly区别

前言:

        这个问题我们在平常开发工作中可能不太注意,但在面试官那里可能被经常提及!深入理解他们对我们的开发有很大的指导性.提升程序的性能以及减少出错率!

讲义:

        当我们理解const与readonly的区别时,可能牵涉出C#语言的两种常量类型,静态常量与动态常量.

        静态常量是编译器在编译期间就对其进行解析的常量!所以我们在声明静态常量的时候就要用常量表达式对其进行初始化.

        动态常量是编译器在运行期间对其进行解析的常量,编译器编译期间将其声明为只读常量,此常量可以延迟到构造函数中进行初始化.

       const就是静态常量,而readonly就是动态常量.

       下面看一个实例:

       

class Program
    {
        class Test
        {
           public  const int constTest = 2;
           public  readonly int readonlyTest;
           //也可以在声明时初始化
           //public readonly int readonlyTest=3;
           public  static readonly int staticReadonlyTest;
           //同readonlyTest
           public Test()
           {
               readonlyTest = 3;
               //延迟到构造函数中初始化
           }
           static Test()
           {
               staticReadonlyTest = 4;
               //延迟到构造函数中初始化
               //注意:static变量在static构造函数中初始化
           }
           
        }
        static void Main(string[] args)
        {
            Console.WriteLine("constTest is {0},staticReadonlyTest is {1}", Test.constTest, 

Test.staticReadonlyTest);
            Console.ReadLine();
        }
    }
        下面我们再列出他们(const,readonly以及static readonly)的相同点和不同点

       相同点:

  1.                 const与readonly都是只读的.
  2.                 const默认是static的,而且在编译期间已经解析完成.所以const与static readonly 只能由类来访问,而readonly由实例来访问.

       不同点

  1.                 const既可以修饰类中的成员,又可以修饰函数体中的成员.而readonly只能修改类中的成员.
  2.                 const(静态常量)只能声明为简单的数据类型,如int,浮点型,枚举,布尔,字符串型.而readonly(动态常量)可以修饰一下对象类型,如Datetime类型.

        注意:

  1.                const默认是静态的,不能再static const!
  2.                static readonly常量,如果要在构造函数中初始化其值,必须在静态无参构造函数中初始化.

总结:

       const是静态常量,readonly是动态常量.const高效,readonly灵活!但实际开发中我们经常用static readonly 来代替const, 以平衡const在灵活性上的不足.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值