如何将信息传播到其他班级?



前言

我有一个关于如何处理两个需要来自两者之一的信息的独立类的一般性问题。假设我们有 2 个类,AB类 A将是客户端与之交互的类。对于一个简单的情况,我们还假设类A是一个通用脚本,它提供了健康的东西,而类 B是一个命中框脚本。类 A有两个变量,一个数字运行状况和一个表示死亡的布尔值。B类有一个布尔值,用于如果命中框可以攻击。我将用 C# 概述这些类。

A类

public class A{
double health = 100;
bool dead = false;
public void damage(double amount){
health -= amount;     
if(health <= 0){
health = 0;
dead = true;
//code to run after death...
}
}
}

B类

public class B{
bool canHit = true;
void Hit(){
//do some hit code here...
}   
}

现在,假设这两个类必须协同工作,因为它们附加到单个玩家/敌人。为了让命中盒类知道它不能再打了,它必须知道它已经死了;这就是我的问题发挥作用的地方。

问题

我应该如何让B类知道它已经死了,哪种方式是最好的方法?

我已经知道多种方法可以做到这一点,但我想更深入地了解是否有正确的方法以及为什么它比其他方法更正确。以下是我的一些解决方案:

解决方案 1

类 A引用类 B,类 B中有一个函数将"canHit"布尔值切换为"false"。当玩家死亡时调用此函数。

解决方案 2

B类引用了A类。每当命中框想要命中时,它都会检查A类是否死亡。

我主要是想弄清楚我应该在哪里有参考以及如何执行检查。在这种情况下,我认为解决方案1是优越的,因为死亡是触发一次的,任何因死亡而必须停止的东西都可以从A类中引用和停用,而解决方案 2必须反复检查它是否可以击中。

同样,这只是一个特定的用例,但我想了解引用应该在哪里以及如何根据其他类中的出现来更改类的变量。谢谢!

遵循单一责任原则。我假设 B 类是命中框,A 类是玩家。

玩家有生命值和命中框。玩家只有在活着的情况下才能击中。命中盒本身没有死或活的概念。据推测,它只关心自己的位置而不是目标的位置。因此,玩家在命中时应执行自己的检查,而不是将该条件传递给命中框。

在单一责任原则中,意味着如果一个类不需要做某事,那么它就不应该做。如果玩家死了,命中框大概仍然可以运行。问题是是否允许玩家击中任何东西。在这种情况下,玩家有责任弄清楚这一点,而不是命中框的责任。

相关内容

最新更新