C# 两级互动

C# 两级互动,c#,oop,C#,Oop,如何在Player.Update()中访问Game的map?当然,最有效的解决方案是在Player.Update()中添加一个map参数。但这种方式对我来说似乎是错误的。我最近读了C++书籍,知道指针。我正在考虑在Player类中添加指向map的指针,并在Player.Update()中使用它。我知道C#也有指针,但从未使用过。在这种情况下使用它们是件好事吗?或者也许有更好的解决方案,不涉及指针?我知道我在OOP方面很差。显然,你需要找出什么是引用类型,什么是对象引用。这对于使用C#是至关重要的

如何在
Player.Update()
中访问
Game
map
?当然,最有效的解决方案是在
Player.Update()中添加一个
map
参数。但这种方式对我来说似乎是错误的。我最近读了C++书籍,知道指针。我正在考虑在
Player
类中添加指向
map
的指针,并在
Player.Update()中使用它。我知道C#也有指针,但从未使用过。在这种情况下使用它们是件好事吗?或者也许有更好的解决方案,不涉及指针?我知道我在OOP方面很差。

显然,你需要找出什么是引用类型,什么是对象引用。这对于使用C#是至关重要的。由于两个类都是引用类型,因此使用该类型声明的所有变量都是对对象的引用


您只需将
游戏
传递给
玩家即可。更新
以传递对现有游戏的引用。

指针?不,是C,不是C++。对于C#中的指针来说,这种情况不太合适。您应该返回一些内容。循环会在以后的设计中导致问题。为什么不将
map
的值从
Game.Update()
传递到
Player.Update()
?或者,如果您想保护
map
实例,则可以将
Game
引用传递给
Player.Update()
,然后在
Game
中提供方法或属性以访问
map
中的信息,而不暴露
map
对象本身。请注意,C++引用类型值(即“引用”)大致相当于C++指针。您不需要使用实际的C#指针来实现相同的结果。@PeterDuniho我有一个坏习惯:我总是在编写代码之前尝试优化东西。在这种情况下,我认为将
map
传递给
Player.Update(byte[,]asd)
将是低效的,因为它按值复制数组,并且经常调用
Update
。@MarcinJuraszek C#中指针的正确情况是什么?你的意思是说它应该像
Player.Update(游戏a)
。您可以通过任何方式传递对游戏的引用。
class Game
{
    byte[,] map = new byte[5, 5];
    Player p;

    public Game()
    {
        p = new Player();
    }

    public void Update()
    {
        p.Update();
    }
}

class Player
{
    public Player()
    {
        //init...
    }

    public void Update()
    {
        //this code needs map
    }
}