使用在静态方法中创建的实例从静态方法调用非静态方法

Calling non static method from static method USING instance created in the static method

我尝试编写自己的 Console Snake 游戏,问题是这个.. 我的整个游戏都在主线程中,然后我创建了 addVlakno(新线程)来计算那里的秒数,因此它可以每秒从 Main 中创建的 hra 实例调用一个方法,因此它将清除控制台并执行一些要移动的方法.

class Program
    { 
        static void Main(string[] args)
        {
            Hra hra = new Hra();
            Thread addVlakno = new Thread(Run);
            addVlakno.Start();

...

        }

        public static void Run()
        {

            Thread.Sleep(1000);
            hra.method(); // The problem is here* 

        }
    }

*我知道我必须在这里有一个现有的 Hra 实例,但我需要使用在 Main 中创建的实例,这可能吗?通过一些代表,或一些指示或其他方式?因为创建的hra有游戏的所有值,所以我需要使用它们。

我试着把 Hra hra = new Hra(); 放在 Main 之前,但在这种情况下,我什至不能在 main 中使用它。

您可以按如下方式传递参数:

static void Main(string[] args)
{
    Hra hra = new Hra();
    Thread addVlakno = new Thread(()=>Run(hra));
    addVlakno.Start();
}

public static void Run(Hra hra)
{
    Thread.Sleep(1000);
    hra.method(); // No problem here* 
}

您目前无法访问 hra,因为静态方法只能访问其他静态变量和方法。您可以在 Main:

之外将 hra 声明为 static
static Hra hra = new Hra();

static void Main(string[] args)
{
...
}

这将允许您在 Run 中访问 hra