const常量:
<span style="font-size:14px;">//const常量有两个优点,一个是由于使用了有意义的名称,和数字相比,const常量更易阅读和修改;
//第二个优点是由于编译器保证它的值在程序运行过程中保持固定不变,和变量相比,const更健壮
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//特别需要注意的是,类的const常量成员是 隐式静态 的,为所有圆共有。
//所以在类外要通过类名来引用变量PI。而且const默认是静态的,但不能用static关键字声明
namespace _8._3._1const常量
{
//定义园类
class Circle
{
//公有变量
public double radius; //半径
public const double PI = 3.1415926; //圆周率
//构造函数
public Circle(double radiusValue)
{
radius = radiusValue;
}
// 函数:计算周长
public double GetCircumference()
{
return 2 * PI * radius;
}
//函数:计算面积
public double GetArea()
{
return PI * radius * radius;
}
}
class Program
{
static void Main(string[] args)
{
Circle mycircle = new Circle(10);
Console.WriteLine("圆周率:{0}", Circle.PI);
Console.WriteLine("半 径:{0}", mycircle.radius);
Console.WriteLine("周 长:{0}",mycircle.GetCircumference());
Console.WriteLine("面 积:{0}", mycircle.GetArea());
Console.ReadLine();
}
}
}
//请找出使用const变量PI的代码,与其他三个成员比较,看看在使用上有何区别</span>
运行结果如下:
readonly常量:
<span style="font-size:14px;">//const常量是隐式静态的,为同一个类的全部对象所共有,所有对象具有相同的值。
//如果O1和O2是Circle类的两个对象,那么它们的const常量PI具有相同的大小,都是3.1415926
//
//一座旅店的房间总数是固定的常数,但是不同旅店可能有不同的房间数目。
//为了表示房间总数,我们需要这样一种常量,它在类的具体对象中是固定的常数,
//但在不同对象中可以有不同的值。这种常量可以用readonly常量实现
//
//现在我们建立一个“旅店类”用readonly常量roomNumber表示房间总数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _8._3._2readonly常量
{
//定义Hotel类
class Hotel
{
public readonly int roomNumber; //房间总数
public int guestNumber = 0; //已入住的房间数目
//构造函数
public Hotel(int roomNumberValue)
{
roomNumber = roomNumberValue; //在构造函数中初始化readonly常量
}
//函数:判断旅店是否已满
private bool IsFull()
{
if (guestNumber >= roomNumber)
return true;
else
return false;
}
//函数:入住一个旅客
public void LodgeIn()
{
if (IsFull())
Console.WriteLine("对不起,房间已满!");
else
{
++guestNumber;
Console.WriteLine("入住成功!");
}
}
}
//与const常量不同,readonly常量时非静态常量,每个对象可以有不同的值。
//我们把readonly常量的初始化代码放在了构造函数里,这样每个对象都可以有不同的值
class Program
{
static void Main(string[] args)
{
Console.WriteLine("=====太阳旅店=====");
Hotel sunHotel = new Hotel(5);
//入住2人
for(int i=1; i<=2; ++i)
{
sunHotel.LodgeIn();
}
Console.WriteLine("房间总数:{0}", sunHotel.roomNumber);
Console.WriteLine("入住旅客:{0}", sunHotel.guestNumber);
Console.WriteLine("=====月亮旅店=====");
Hotel moonHotel = new Hotel(3);
//入住4人
for (int i = 1; i <= 4; ++i)
{
moonHotel.LodgeIn();
}
Console.WriteLine("房间总数:{0}", moonHotel.roomNumber);
Console.WriteLine("入住旅客:{0}", moonHotel.guestNumber);
Console.ReadLine();
}
}
}
</span>