【发布时间】:2022-12-19 18:50:30
【问题描述】:
我有一个包含 Mob 对象的 Room 类。一个 Mob 对象可以是 Passive 类型或 Hostile 类型,并且每个对象都有自己特定的行为。这些 Mob 对象会从一个房间移动到另一个房间。如果一个 Player 试图与其中一个战斗,我需要一种方法来调用 Mob 实际类型的特定行为。就像,被动将试图逃避,而敌对将试图反击。有没有办法不用铸造就可以做到这一点?
public class Room {
private Mob mob;
public Mob Mob { get; set; }
}
public abstract class Mob {
protected Room room;
}
public class Passive : Mob {
// Some passive-specific code
public void Run() { }
public void SayGreeting() { }
public void SayGoodbye() { }
}
public class Hostile : Mob {
// Some hostile-specific code
public void Fight() { }
public void SayOnLose() { }
public void SayOnWin() { }
}
我知道 (Passive)myRoom.Mob 和 (Hostile)myRoom.Mob 可以做到这一点,但我想知道是否有更好的选择。谢谢。
【问题讨论】:
-
你可能不想那样做。考虑实施策略并调用通用方法。
标签: c# object oop inheritance parent-child