修改Lesson13名称
添加Lesson13练习
This commit is contained in:
@@ -1,10 +1,115 @@
|
||||
namespace Lesson13_继承_李氏替换原则
|
||||
{
|
||||
|
||||
#region 知识点一 基本概念
|
||||
//里氏替换原则是面向对象七大原则中最重要的原则
|
||||
//概念:
|
||||
//任何父类出现的地方,子类都可以替代
|
||||
//重点:
|
||||
//语法表现——父类容器装子类对象,因为子类对象包含了父类的所有内容
|
||||
//作用:
|
||||
//方便进行对象存储和管理
|
||||
#endregion
|
||||
|
||||
#region 知识点二 基本实现
|
||||
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攻击");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello, World!");
|
||||
//里氏替换原则
|
||||
GameObject player = new Player();
|
||||
GameObject monster = new Monster();
|
||||
GameObject boss = new Boss();
|
||||
|
||||
GameObject[] objects = new GameObject[] { player, monster, boss };
|
||||
|
||||
//player.atk();//容器是gameobject,没有atk这个方法
|
||||
|
||||
#region 知识点三 is和as
|
||||
//基本概念
|
||||
//is:判断一个对象是否执行类对象
|
||||
//返回时:bool 是为真 不是为假
|
||||
if (player is Player)
|
||||
{
|
||||
|
||||
}else if (player is Monster)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//as:将一个对象转换为指定类对象
|
||||
//返回值:指定类型对象
|
||||
//成功返回指定类型对象,失败返回null
|
||||
Player test = player as Player;//将player转换为Player类型对象(可)返回player类型对象(Player 类型的 test,存放player)
|
||||
Player test2 = monster as Player;//将monster转换为Player类型对象(报错)返回空(Player 类型的 test2, 存放的是空)
|
||||
|
||||
|
||||
//基本语法
|
||||
// 类对象 is 类名 该语句块 会有一个bool返回值 true和false
|
||||
// 类对象 as 类名 该语句块 会有一个对象返回值 对象和null
|
||||
// 一般组合使用
|
||||
if(player is Player)
|
||||
{
|
||||
//常规写法
|
||||
//Player p1 = player as Player;
|
||||
//p1.PlayerAtk();
|
||||
|
||||
//一句话写法
|
||||
(player as Player).PlayerAtk();
|
||||
}
|
||||
//同时声明多个子类对象,并集中按需使用 ->GameObject[] objects = new GameObject[] { player, monster, boss };
|
||||
for (int i = 0; i < objects.Length; i++)
|
||||
{
|
||||
if (objects[i] is Player)
|
||||
{
|
||||
//调用Player需要的逻辑
|
||||
//eg:
|
||||
(objects[i] as Player).PlayerAtk();
|
||||
}
|
||||
else if (objects[i] is Monster)
|
||||
{
|
||||
//调用Monster需要的逻辑
|
||||
//eg:
|
||||
(objects[i] as Monster).MonsterAtk();
|
||||
}
|
||||
else if (objects[i] is Boss)
|
||||
{
|
||||
//调用Boss需要的逻辑
|
||||
//eg:
|
||||
(objects[i] as Boss).BossAtk();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user