1. static
- wolfCount 是描述狼群整体特征的量,这种描述类的整体特征的量可以用静态变量
实现。静态变量在内存中只有一份,为类的所有对象共享。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wolf
{
class Program
{
static void Main(string[] args)
{
Lion lion = new Lion();
Wolf[] wolf = new Wolf[5];//这一步并没有调用构造函数
for (int i = 0; i < wolf.Length; i++)
{
wolf[i] = new Wolf();
}
//这些狼的心理活动
Console.WriteLine("我们一共有{0}只狼", wolf.Length);
//狼开始攻击狮子
for(int i=0;i<wolf.Length;i++)
{
Console.WriteLine("第{0}只狼", i+1);
wolf[i].Action();
}
//狮子反击
lion.CounterAttack();
}
}
class Wolf
{
public static int wolfCount = 0;
public Wolf()
{
wolfCount++;
}
~Wolf()
{
wolfCount--;
}
public void Action()
{
if(wolfCount >= 5)
{
Console.WriteLine("攻击狮子");
}
else
{
Console.WriteLine("逃跑");
}
}
}
class Lion
{
public void CounterAttack()
{
Console.WriteLine("狮子反击");
if(Wolf.wolfCount < 7)
{
Console.WriteLine("狮子获胜");
}
else
{
Console.WriteLine("狼获胜");
}
}
}
}
2. const
const常量有两个优点:
- 使用了有意义的名称,和数字相比,const常量更易于阅读和修改;
- 编译器保证它的值在程序运行过程中保持固定不变,和变量相比,const常量更健壮。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wolf
{
class Program
{
static void Main(string[] args)
{
Circle c1 = new Circle(5.5);
Console.WriteLine("圆半径{0},面积{1},圆周长{2}", c1.radius,c1.GetArea(), c1.GetCircumference());
}
}
class Circle
{
public const double PI = 3.1415926;
public double radius = 0;
public Circle(double radius)
{
this.radius = radius;//注意这里的this的使用
}
public double GetCircumference()
{
return 2 * PI * radius;
}
public double GetArea()
{
return PI * radius * radius;
}
}
}
3. readonly
- 一座旅店的房间总数是固定的常数,但是不同旅店可能有不同的房间数目。为了表示房间总数,我们需要这样一种常量,它在类的具体对象中是固定的常数,但在不同对象中可有不同的值。这种常量可以用 readonly 常量实现。
- 现在我们建立一个“旅店类”,用 readonly 常量 roomNumber 表示房间总数。
- readonly变量只能通过构造函数初始化,初始化之后无法再更改它的值,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wolf
{
class Program
{
static void Main(string[] args)
{
Hotel hanting = new Hotel(4);
Hotel greenHotel = new Hotel(6);
Console.WriteLine("============汉庭酒店==============");
for (int i = 0; i < 5; i++)
{
hanting.LodgeIn();
}
Console.WriteLine("============格林豪泰==============");
for (int i = 0; i < 5; i++)
{
greenHotel.LodgeIn();
}
}
}
class Hotel
{
public readonly int roomNumber;//房间总数量
public int guestNumber = 0;//已经入住房间数量
public Hotel(int room)
{
roomNumber = room;
}
public void LodgeIn()
{
if(guestNumber >= roomNumber)
{
Console.WriteLine("入住失败,{0}个房间都已经住满",roomNumber);
}
else
{
guestNumber++;
Console.WriteLine("入住成功,共有{0}个房间,{1}个入住", roomNumber, guestNumber);
}
}
}
}