http://book.2cto.com/201210/6837.html
教学录像:光盘\mr\video\第3章\声明和使用常量.exe
C#提供了两种类型的常量,一种是用const关键字声明,另一种是用readonly关键字声明。在数学上圆周率p的值为3.1415926...,这个值不会随着外界环境而改变。如果在代码中间接地更改了p的值,程序运行会出现未知的错误;如果将p的值设为常量,在某种程度上会增加程序的健壮性。
常量就是其值固定不变的量,而且常量的值在编译时就已经确定了。常量的类型只能为下列类型之一:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string等。使用关键字const来创建常量,并且在创建常量时必须设置它的初始值。
在C#中,const常量是在编译时设置其值并且永远不能更改其值的字段,在对程序进行编译的时候,编译器会把所有const常量替换为常数。
【例3.18】声明一个正确的常量,同时再声明一个错误的常量,以便读者对比参考,代码如下。
01 const double PI = 3.1415926; //正确的声明方法
02 const int MyInt; //错误:定义常量时没有初始化
注意:常量的值在编译时就已经确定了,C#中使用关键字const来声明常量,而且在声明常量时必须对其进行初始化。程序中使用常量时,实际不需要为常量分配内存,可以在程序集元数据中提取常量的值。
在C#中使用readonly关键字来声明只读字段,只读的字段与常量的用法很相似,都是为程序提供一个只读的值,不同之处在于,readonly字段无须在编译时初始化其值,可以在类型的构造方法中初始化readonly的值,这样readonly的值可以被写入一次。
【例3.19】创建一个控制台应用程序,定义一个readonly只读字段并使用类的构造方法对readonly字段初始化,代码如下。(实例位置:光盘\mr\example\第3章\3.19)
代码位置:光盘\mr\example\第3章\3.19\Test09\Test09\Program.cs
01 class Program
02 {
03 static void Main(string[] args)
04 {
05 Test test = new Test(22); //创建类的实例
06 test.show(); //调用show方法
07 Console.ReadLine();
08 }
09 class Test
10 {
11 public Test(int age) //在类的构造方法中初始化只读字段Age
12 {
13 this.Age = age; //初始化年龄
14 }
15 readonly int Age; //定义只读的字段
16 public void show()
17 {
18 Console.WriteLine("年龄: {0}",Age);
19 }
20 }
21 }
本例运行结果为“年龄:22”。
试一试:修改上面的实例,再添加一个只读字段Name,然后在构造方法Test中初始化其值。
上机练习
上机练习5 定义常量计算圆的周长
创建一个控制台应用程序,定义一个常量字段pi赋值为3.14,根据圆的周长公式计算圆的周长,当圆的半径为20时,周长为125.663704,如图3.13所示。
上机练习6 同时使用常量和只读字段输出信息
要求定义一个类,在该类中定义一个描述国籍的常量,其常量值为“中国”,定义一个描述姓名的readonly字段,并在该类的构造方法中初始化其值,本例运行效果如图3.14所示。
3.4 术语
(1)值类型的变量本身直接存储数据,而引用类型则存储实际数据的引用。
(2)枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。
(3)类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换或者显式转换。
(4)将值类型转换为引用类型的过程叫做装箱。
(5)将引用类型转换为值类型的过程叫做拆箱。
(6)变量本身被用来存储特定类型的数据,可以根据需要随时改变变量中所存储的数据值。
(7)常量就是其值固定不变的量,而且常量的值在编译时就已经确定了。