C# 为什么在尝试调用方法时会出现对象引用错误?
对于这段代码,我在尝试调用C# 为什么在尝试调用方法时会出现对象引用错误?,c#,winforms,C#,Winforms,对于这段代码,我在尝试调用Square.EffectOnPlayer(player)时出错 错误表示需要对象引用,为什么不接受player public void Move(int numberOfSquares, Player player) { int current_pos; int new_pos; current_pos = Square.GetSquarenumber(location); new_pos = numberOfSquares + c
Square.EffectOnPlayer(player)时出错代码>
错误表示需要对象引用,为什么不接受player
public void Move(int numberOfSquares, Player player) {
int current_pos;
int new_pos;
current_pos = Square.GetSquarenumber(location);
new_pos = numberOfSquares + current_pos;
location = Board.GetGameBoardSquare(new_pos);
Square.EffectOnPlayer(player);
}
如果需要,将刷新页面以提供更多信息
编辑
这是该方法引用的square类库(省略变量):
此函数不是静态的,而其他函数是静态的,因此在不引用Square类实例的情况下调用EffectOnPlayer将导致错误。因此,您要么需要对Square实例的引用,要么将其设置为静态
如果只给Move函数一个正方形实例的引用,那么一切都应该正常
public void Move(int numberOfSquares, Player player, Square square)
{
square.EffectOnPlayer(player);
...
}
您的平方变量是类还是对象实例?你能告诉我们Square
的定义和EffectOnPlayer
方法吗?调试你的代码(调试是任何程序员最基本和最重要的技能)并告诉我们什么是Square。Square可能不是静态的。如果问题是由Square不是静态的引起的,有没有一种方法可以避免平方静态的问题?@user2396303是的,如果你不想使某个东西静态,那么你需要在某处保留一个引用。从生成单例到保留引用数组,再到传递参数。在不知道你的应用程序做了什么,也不知道它是完整的代码的情况下,你应该如何继续,这是一个未知的问题。但是当我想调用move时,我是否需要将某人放入square
?我在这里猜测一些,但我猜你希望玩家发生一些事情,这取决于玩家站在哪个square上。因此,您需要以某种方式获取玩家当前所在的方形实例,并使用该实例调用EffectOnPlayer。那么,您是否有某种形式的数据结构,其中包含不同的方块?如果是这样,则创建一个函数来获取当前的square实例并使用它。
public override void EffectOnPlayer(Player who)
{
Random rand = new Random();
if (rand.Next(0, 2) == 0)
who.Deduct(one_hundred);
else
who.Add(one_hundred);
}
public void Move(int numberOfSquares, Player player, Square square)
{
square.EffectOnPlayer(player);
...
}