Files
Csharp/C#核心/Lesson13_继承-李氏替换原则/Program.cs
T

116 lines
3.5 KiB
C#
Raw Normal View History

2025-09-08 15:38:01 +08:00
namespace Lesson13_继承_李氏替换原则
{
2025-09-09 15:40:24 +08:00
#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
2025-09-08 15:38:01 +08:00
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
2025-09-09 15:40:24 +08:00
//里氏替换原则
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
2025-09-08 15:38:01 +08:00
}
}
}