不知道为啥我得到“非静态字段需要对象引用”

Posted

技术标签:

【中文标题】不知道为啥我得到“非静态字段需要对象引用”【英文标题】:Not sure why I'm getting "An object reference is required for the non-static field"不知道为什么我得到“非静态字段需要对象引用” 【发布时间】:2017-12-12 03:48:30 【问题描述】:

我的代码如下。任何帮助,将不胜感激。如果这是一个简单的错误,我提前道歉 - 我仍然是 C# 的初学者(通常是面向对象的)。

public class Game1 : Microsoft.Xna.Framework.Game

    public void Update()
    
        Levels level = new Levels();
        Game1 mainGame = Game1;
        Levels.AliensSetUp(1, 2, 50, 0, 0, 0, mainGame);
    


class Levels

    public void AliensSetUp(int numberRows, int numberColumns, int spaceBetween, int XStart, int YStart, int AlienType, Game1 mainGame)

错误出现在“Levels.AliensSetUp(1, 2, 50, 0, 0, 0, mainGame)”中的“mainGame”上。我也尝试用“game1”替换“mainGame”,但我也得到了一个错误。谢谢你能给我的任何帮助。

【问题讨论】:

您需要了解static members vs instance members in C#。您缺少一些基本的面向对象编程概念。 您正在尝试使用类名 (Levels) 调用 AliensSetUp 方法。相反,您需要使用您创建的对象的实例 (level)。根据您问题中的代码,它将是level.AlensSetUp(...) 解决了 - 谢谢! 【参考方案1】:

级别不是静态的。您已经“新建”了 Levels 类,然后调用它的 AliensSetUp() 方法。例如:

var levels = new Levels(); 
levels.AliensSetup(...)

【讨论】:

他没有对 Game1 做任何事情。他试图将类型本身分配给该类型的一个实例。他不知道“实例”和“静态”是什么意思。 谢谢,澄清了。它应该是: var levels = new Levels(); levels.AliensSetup... 我认为这属于答案,而不是评论。 嘿,我确实有“Levels level = new Levels();”在我的代码中。我不得不简化堆栈溢出的代码,但我忘记添加了。不过感谢您的帮助。

以上是关于不知道为啥我得到“非静态字段需要对象引用”的主要内容,如果未能解决你的问题,请参考以下文章

我的应用程序不断崩溃,大概是因为空对象引用错误,但我不知道为啥

我得到一个“TypeError:'int'对象没有属性'_getitem',我不知道为啥

为啥函数没有得到动态数组? (我正在使用指针和引用)

为啥这个对象在分配其他东西时不通过引用传递?

在java中,引用数据不就是一种对象么?为啥在调用函数中不能进行修改数值??

为啥这会给我一个空引用异常? [复制]