69. 在C#中存储场景中的所有敌对对象
69.1 题目
在C#当中,我们想要用一个字典容器存储场景中的所有敌对对象,比如怪物、Boss、可被攻击的场景物件等等,应该如何存储?
69.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
方法来执行相应的攻击逻辑。
使用里氏替换原则,可以让父类容器存储各种不同类型的子类对象,从而实现灵活的对象管理和调用。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com