readonly 修饰符
namespace Ch05Ex03
{
class RandomNum
{
const int cc = 200; //const字段只可以在字段的声明语句中初始化
readonly double aa = 3.14; //提供初始值
readonly int bb; // 未提供
readonly static int dd; //静态的readonly字段,必须在静态构造函数中初始化
public RandomNum(double _aa,int _bb)
{
aa = _aa;
bb = _bb;
//cc = _cc; //不可以在实例构造函数中初始化const字段
WriteLine("实力构造函数被调用!");
}
static RandomNum()
{
dd = 55; //静态构造函数初始化静态字段
WriteLine("静态构造函数被调用!");
}
public void Show()
{
WriteLine($"输出aa的值为:{aa},\n输出bb的值为: {bb} , \n输出dd的值:{dd}" );
}
}
class Program
{
static void Main(string[] args)
{
RandomNum pt1 = new RandomNum(5.6, 77);
pt1.Show();
WriteLine();
RandomNum pt2 = new RandomNum(3.6, 23);
pt2.Show();
ReadKey();
}
}
}
输出结果为:
静态构造函数被调用!
实力构造函数被调用!
输出aa的值为:5.6,
输出bb的值为: 77 ,
输出dd的值:55
实力构造函数被调用!
输出aa的值为:3.6,
输出bb的值为: 23 ,
输出dd的值:55
字段也可以使用readonly 修饰符声明, 其作用类似于将字段声明为const , 一担值被设定就不能改变。
const 字段只能在字段的声明语句中初始化, 而 readonly 字段可以在下列任意位置设置它的值:
- 字段声明语句,类似 const, 就跟上述程序那样。
- 类的任何构造函数。 如果是 static字段, 初始化必须在静态构造函数中完成。
注意: const字段的值必须在编译时决定, 而readonly 字段的值可以在运行时决定。 这样我们就可以在不同的环境或不同的构造函数中设置不同的值。
注意: readonly 和 const 不同, const的行为总是静态的。而readonly字段 以下两点是正确的:
- 它可以是实例字段, 也可以是静态字段。
- 它在内存在有存储位置, 而 const 字段是没有存储位置的。