【问题标题】:Calling non static method from static method USING instance created in the static method从静态方法使用静态方法中创建的实例调用非静态方法
【发布时间】:2016-08-20 15:50:13
【问题描述】:

我尝试编写自己的控制台蛇游戏,问题是这个.. 我的整个游戏都在主线程中,然后我创建了 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 Hra hra = new Hra();Main 之前怎么样?
  • 您不能在Run() 中使用hra,因为现在hraMain 中的局部变量。如果你想在Run() 中访问它,你应该在Program 类中将hra 声明为static 变量(static Hra hra;Main 方法之外)。根据您要执行的操作,这不一定是一个好习惯,但它会适用于该测试/练习计划。

标签: c# multithreading static non-static


【解决方案1】:

您目前无法访问hra,因为静态方法只能访问其他静态变量和方法。你可以在Main之外声明hrastatic

static Hra hra = new Hra();

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

这将允许您在Run 中访问hra

【讨论】:

    【解决方案2】:

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

    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* 
    }
    

    【讨论】:

    • @Ators :如果此答案解决了您的问题,请按左侧的复选标记将其标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多