如何访问子对象中更高级别的变量/对象

本文关键字:对象 高级别 变量 何访问 访问 | 更新日期: 2023-09-27 18:23:45

我从未想过如何在C#中做到这一点:

假设我有两个类:Game.cs和Player.cs.

我发现任何属于Game.cs的东西都必须通过属于Player.cs的任何函数的参数传递。例如,如果我在Game中加载了一个音效,而Player是Game的一个孩子,并且Player有一个函数"PlaySoundEffect()",那么Player访问该声音的唯一方法就是通过参数传递:"PlaySound effect(SoundEffect-sound)"

我想知道的是:

  1. 如何访问对象而不将其作为参数
  2. 为什么我不能像这样访问它们:"Game.sound",即使声音在Game中

如何访问子对象中更高级别的变量/对象

只需在Game类中设置任何全局变量static,这意味着它们不是Game实例的一部分,而是全局可访问的。

EG,在Game.cs
SoundEffect sound;
成为
static SoundEffect sound;

现在您的玩家类可以执行
Game.sound.Play();
或者它需要的任何东西。

soundGame的任何特定实例的属性。

您只能从特定实例中获取它。

相反,您可以添加一个Game实例作为Player的属性,这样每个玩家都有一个对其游戏的引用。

您无法访问它们,因为它们不是静态的。

但是,

你可以把它们包起来,然后传给球员。类似这样的东西:

class GameSoundManager {
    public SoundEffect PlayerDie { get; set; }
}
class Game {
    private GameSoundManager _soundManager;
    private Player _player;
    public Game() {
        _soundManager = new GameSoundManager() {
            PlayerDie = // load the sound
        };
        _player = new Player(_soundManager);
    }
}
class Player {
    private GameSoundManager _soundManager;
    public Player(GameSoundManager soundManager) {
        _soundManager = soundManager;
    }
    // use _soundManager.PlayerDie anywhere in your player class.
}