A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柏云杉 中级黑马   /  2012-3-23 13:24  /  1526 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚刚看到有人在问,也看了回答。但还是不太清楚它们俩在项目中的用处。
还有想问下编译时常量和运行时常量的区别是什么?
能否举例说明下什么情况必须用const而不能用readonly,什么时候必须用readonly而不能用const呢?

2 个回复

倒序浏览
const是静态常量,所以在编译的时候值就确定下来了
readonly是动态常量,要运行到那一步就会进行赋值。
下面两个例子将很好的解释这个问题。
using System;
class P
{
    static readonly int A=B*10;
    static readonly int B=10;   
    public static void Main(string[] args)
    {
        Console.WriteLine("A is {0},B is {1} ",A,B);
    }
}
对于上述代码,输出结果是多少?很多人会认为是A is 100,B is 10吧!其实,正确的输出结果是A is 0,B is 10。
using System;
class P
{
    const int A=B*10;
    const int B=10;   
    public static void Main(string[] args)
    {
        Console.WriteLine("A is {0},B is {1} ",A,B);
    }
}
  对于上述代码,输出结果又是多少呢?难道是A is 0,B is 10?其实又错了,这次正确的输出结果是A is 100,B is 10
const是静态常量,所以在编译的时候就将A与B的值确定下来了(即B变量时10,而A=B*10=10*10=100),那么Main函数中的输出当然是A is 100,B is 10啦。而static readonly则是动态常量,变量的值在编译期间不予以解析,所以开始都是默认值,像A与B都是int类型,故都是0。而在程序执行到A=B*10;所以A=0*10=0,程序接着执行到B=10这句时候,才会真正的B的初值10赋给B。
回复 使用道具 举报
→篱誸de~箭 发表于 2012-3-23 13:46
const是静态常量,所以在编译的时候值就确定下来了
readonly是动态常量,要运行到那一步就会进行赋值。
下 ...

原来是这样,明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马