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

时间:2016-08-20 15:50:13

标签: c# multithreading static non-static

我尝试编写自己的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之前,但在这种情况下,即使在主要内容中我也无法使用它。

2 个答案:

答案 0 :(得分:2)

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

static Hra hra = new Hra();

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

这样您就可以访问hra中的Run

答案 1 :(得分:1)

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

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* 
}
相关问题