如何访问子对象中更高级别的变量/对象
本文关键字:对象 高级别 变量 何访问 访问 | 更新日期: 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)"
我想知道的是:
- 如何访问对象而不将其作为参数
- 为什么我不能像这样访问它们:"Game.sound",即使声音在Game中
只需在Game类中设置任何全局变量static
,这意味着它们不是Game实例的一部分,而是全局可访问的。
EG,在Game.cs
中SoundEffect sound;
成为static SoundEffect sound;
现在您的玩家类可以执行Game.sound.Play();
或者它需要的任何东西。
sound
是Game
的任何特定实例的属性。
您只能从特定实例中获取它。
相反,您可以添加一个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.
}