69.在C#中存储场景中的所有敌对对象

  1. 69. 在C#中存储场景中的所有敌对对象
    1. 69.1 题目
    2. 69.2 答案

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 和三个子类 MonsterBoss 以及 AttackableObject。然后,我们创建了一个 Dictionary<string, Enemy> 容器,并将不同类型的敌对对象添加到字典中。最后,通过遍历字典,调用每个敌对对象的 Attack 方法来执行相应的攻击逻辑。

使用里氏替换原则,可以让父类容器存储各种不同类型的子类对象,从而实现灵活的对象管理和调用。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏