里氏替换原则是指,对于已经继承了父类的子类,可以用父类容器来装载子类对象,便于对象的管理与存储。而在需要执行子类内部的具体逻辑时,则搭配is与as关键字来使用。is关键字用于判断某个对象是否属于某个类,若是则返回True,否则返回False;as关键字用于将某个对象转换为某个类内的对象,若转换成功,则返回转换成对应类的对象,若转换失败则返回null。
cs
namespace ConsoleApp5
{
class GameObject { }
class Player : GameObject
{
public void PlayerAtk()
{
Console.WriteLine("玩家攻击");
}
}
class Monster : GameObject
{
public void MonsterAtk()
{
Console.WriteLine("怪物攻击");
}
}
class Boss : GameObject
{
public void BossAtk()
{
Console.WriteLine("Boss攻击");
}
}
class Program
{
static void Main(string[] args)
{
//里氏替换
GameObject player = new Player();
GameObject monster = new Monster();
GameObject boss = new Boss();
GameObject[] objects = new GameObject[] { new Player(),new Monster(),new Boss()};
//利用is与as搭配使用,先判断对象是否属于,在转换为对应对象并调用对应方法
for (int i = 0; i < objects.Length; i++)
{
if (objects[i] is Player)
{
Player p = objects[i] as Player;
p.PlayerAtk();
//也可写作(objects[i] as Player).PlayerAtk()
}
else if (objects[i] is Monster)
{
(objects[i] as Monster).MonsterAtk();
}
else if (objects[i] is Boss)
{
(objects[i] as Boss).BossAtk();
}
}
}
}
}