基本概念:任何父类出现的地方,子类都可以代替;
语法表现:父类容器装子类对象。因为子类对象包含了父类的所有内容。
作用:便于对象的存储和管理。
关键词:is和as
is:用于判断对象是否为某一指定类对象,是返回true,否返回false;
as:用于转换对象到指定类对象,转换成功返回转换后的对象,转换失败返回null。
语法:
类对象 is 类名 返回true或false
类对象 as 类名 放回指定类型对象或null
实例:
namespace L13_里氏替换原则
{
//class gameobject { }
//class player : gameobject
//{
// public void playeratk() { console.writeline("player攻击"); }
//}
//class monster : gameobject { }
//class boss : gameobject { }
//练习题一
//写一个Monster类,它派生出Boss和Goblin两个类,Boss有技能;
//小怪有攻击;随机生成10个怪,装载到数组中 ,遍历这个数组,调用他们的攻击方法,如果是boss就释放技能。
class Monster
{
}
class Boss : Monster
{
public void Skill()
{
Console.WriteLine("释放技能!!");
}
}
class Goblin : Monster
{
public void Attack()
{
Console.WriteLine("攻击!!");
}
}
internal class Program
{
static void Main(string[] args)
{
//GameObject player = new Player();
//GameObject monster = new Monster();
//GameObject boss = new Boss();
用数组存储对象
//GameObject[] gameObject4 = new GameObject[] { new Player(), new Monster(), new Boss() };
用if判断player是否为Player类型,如果是的话,将player转化为Player类型的对象使用其里面的方法。
//if (player is Player)
//{
// Player p = player as Player;
// p.PlayerAtk();
//}
Monster[] m = new Monster[] { new Boss(),new Goblin(), new Goblin(), new Goblin(),
new Goblin(), new Goblin(), new Boss(), new Boss(), new Boss(), new Boss()};
for (int i = 0; i < m.Length; i++)
{
if(m[i] is Boss)
{
Boss boss = m[i] as Boss;
boss.Skill();
}
if (m[i] is Goblin)
{
Goblin goblin = m[i] as Goblin;
goblin.Attack();
}
}
}
}
}