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

© 刘逍遥 中级黑马   /  2012-6-23 21:54  /  2070 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

怎么用好这两个关键字呢?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
1,const 字段只能在该字段的声明中初始化;
2,readonly字段可以在声明或构造函数中初始化;
3,根据所使用的构造函数,readonly 字段可能具有不同的值;
4,const 字段为编译时常数,而readonly字段可用于运行时常数。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
class ReadOnlyA
{
    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 0,B is 10
class ConstB
{
    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 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。所以输出结果为:输出结果是A is 0,B is 10

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
楼上的说的很多,再补充一点,const不仅可以用于类中的常字段的声明(自动静态,无须static修饰),还可用于方法中的局部变量的声明,即声明一个常量。readonly只能用于定义类中的只读字段,静态的和实例的皆可,但不能用于属性。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马