Oop 如何向其他类传播信息?

Oop 如何向其他类传播信息?,oop,reference,Oop,Reference,前言 我有一个广义的问题,关于如何处理两个独立的类,它们需要来自其中一个类的信息。假设我们有两个类,A和B。类A将是客户端与之交互的类。对于一个简单的例子,我们还可以说classa是一个提供健康的通用脚本,classB是一个hitbox脚本。类A有两个变量,一个数字健康值和一个布尔死亡值。类B有一个布尔值,用于判断hitbox是否可以攻击。我将用C#来概述这些课程 A类 public class A{ double health = 100; bool dead = false;

前言

我有一个广义的问题,关于如何处理两个独立的类,它们需要来自其中一个类的信息。假设我们有两个类,AB。类A将是客户端与之交互的类。对于一个简单的例子,我们还可以说classa是一个提供健康的通用脚本,classB是一个hitbox脚本。类A有两个变量,一个数字健康值和一个布尔死亡值。类B有一个布尔值,用于判断hitbox是否可以攻击。我将用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...
      }
   }

}
现在,让我们假设这两个类必须一起工作,因为它们连接到一个玩家/敌人。为了让hitbox类知道它不能再命中了,它必须知道它已经死了;这就是我的问题发挥作用的地方

问题

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

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

解决方案1

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

解决方案2

B引用类a。每当hitbox想要命中时,它都会检查classA是否已死亡

我主要是想弄清楚我应该在哪里得到参考资料,以及应该如何进行检查。在这种情况下,我认为解决方案1优于解决方案1,因为死亡只会触发一次,任何因死亡而必须停止的操作都可以从类A中引用和停用,而解决方案2必须反复检查它是否可以命中


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

遵循单一责任原则。我假设B类是一个杀手锏,a类是玩家

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


在单一责任原则中,意思是如果一个类不需要做某事,那么它就不应该做。如果玩家已经死了,hitbox可能仍然可以运行。问题在于球员是否被允许打任何东西。在这种情况下,玩家有责任弄清楚这一点,而不是hitbox的。

我将从类B中删除“只有在活着的情况下才能命中”逻辑,并将该逻辑放在实际调用hit()的任何类中,那么您认为解决方案1在这种情况下会更好吗?
public class B{

   bool canHit = true;

   void Hit(){
      //do some hit code here...
   }   
}