58.存储场景中的所有敌人
58.1 题目
在C#当中,我们想要用一个字典容器存储场景中的所有敌对对象,比如怪物、Boss、可被攻击的场景物件等等,应该如何存储?
58.2 深入解析
可以使用里氏替换原则,用父类容器装载子类对象。以下是一个示例代码:
using System;
using System.Collections.Generic;
// 定义一个敌对对象的基类
public class Enemy
{
public string Name { get; set; }
public virtual void Attack()
{
Console.WriteLine(Name + " is attacking!");
}
}
// 定义怪物类,继承自Enemy
public class Monster : Enemy
{
public override void Attack()
{
Console.WriteLine(Name + " the Monster is attacking ferociously!");
}
}
// 定义Boss类,继承自Enemy
public class Boss : Enemy
{
public override void Attack()
{
Console.WriteLine(Name + " the Boss is attacking with power!");
}
}
// 定义可攻击的场景物件类,继承自Enemy
public class AttackableObject : Enemy
{
public override void Attack()
{
Console.WriteLine(Name + " the Attackable Object is being attacked!");
}
}
public class Program
{
public static void Main()
{
// 创建一个字典容器来存储所有敌对对象
Dictionary<string, Enemy> enemies = new Dictionary<string, Enemy>();
// 添加各种敌对对象到字典中
enemies.Add("monster1", new Monster { Name = "Goblin" });
enemies.Add("boss1", new Boss { Name = "Dragon" });
enemies.Add("object1", new AttackableObject { Name = "Explosive Barrel" });
// 遍历字典并调用每个敌对对象的攻击方法
foreach (var enemy in enemies.Values)
{
enemy.Attack();
}
}
}
在这个示例中,我们定义了一个基类 Enemy 和三个子类 Monster、Boss 以及 AttackableObject。然后,我们创建了一个 Dictionary<string, Enemy> 容器,并将不同类型的敌对对象添加到字典中。最后,通过遍历字典,调用每个敌对对象的 Attack 方法来执行相应的攻击逻辑。
使用里氏替换原则,可以让父类容器存储各种不同类型的子类对象,从而实现灵活的对象管理和调用。
58.3 答题示例
“在C#中,可以利用里氏替换原则,通过父类容器存储子类对象的方式来管理不同类型的敌对对象。具体实现是:首先定义一个基类
Enemy,包含所有敌对对象的共性成员(如Name属性和Attack方法);然后创建Monster、Boss、AttackableObject等子类继承自Enemy并按需重写方法;最后使用Dictionary<string, Enemy>作为容器,键为对象唯一标识(如ID或名称),值为基类类型。这样,通过统一的基类接口即可管理所有子类对象,实现多态调用。例如:Dictionary<string, Enemy> enemies = new Dictionary<string, Enemy>(); enemies.Add("monster1", new Monster()); enemies.Add("boss1", new Boss()); // 遍历调用多态方法 foreach (var enemy in enemies.Values) { enemy.Attack(); // 根据实际类型执行不同实现 }这种设计使代码具备良好的扩展性,后续新增敌对类型只需继承
Enemy基类,无需修改容器逻辑。”
58.4 关键词联想
- 里氏替换原则(Liskov Substitution Principle)
- 多态(Polymorphism)
- 抽象基类/接口(Abstract Base Class/Interface)
- 字典泛型(
Dictionary<TKey, TValue>) - 统一接口设计(Unified Interface)
- 对象池(Object Pooling)
- 运行时类型识别(RTTI)
as操作符/is关键字- 面向对象设计(OOD)
- 依赖倒置原则(DIP)
- 事件系统(Event System)
- 状态管理(State Management)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com