黑马程序员技术交流社区
标题:
readonly和const这两个关键字
[打印本页]
作者:
刘逍遥
时间:
2012-6-23 21:54
标题:
readonly和const这两个关键字
怎么用好这两个关键字呢?
作者:
许庭洲
时间:
2012-6-24 09:07
1,const 字段只能在该字段的声明中初始化;
2,readonly字段可以在声明或构造函数中初始化;
3,根据所使用的构造函数,readonly 字段可能具有不同的值;
4,const 字段为编译时常数,而readonly字段可用于运行时常数。
作者:
刘玺
时间:
2012-6-24 17:49
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
作者:
逝去的记忆ヽ
时间:
2012-6-25 20:49
1. const 字段只能在该字段的声明中初始化。
readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
4.const 对于引用类型的常数,可能的值只能是 string 和 null。
readonly可以是任何类型
const 的概念就是一个包含不能修改的值的变量。
常数表达式是在编译时可被完全计算的表达式。因此不能从一个变量中提取的值来初始化常量。
如果 const int a = b+1;b是一个变量,显然不能再编译时就计算出结果,所以常量是不可以用变量来初始化的。
readonly 允许把一个字段设置成常量,但可以执行一些运算,可以确定它的初始值。
因为 readonly 是在计算时执行的,当然它可以用某些变量初始化。
readonly 是实例成员,所以不同的实例可以有不同的常量值,这使readonly更灵活。
作者:
黑马李果
时间:
2012-7-3 21:13
楼上的说的很多,再补充一点,const不仅可以用于类中的常字段的声明(自动静态,无须static修饰),还可用于方法中的局部变量的声明,即声明一个常量。readonly只能用于定义类中的只读字段,静态的和实例的皆可,但不能用于属性。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2