2016-08-20 10 views
0

私は自分のコンソールスネークゲームを作成しようとしましたが、問題はこれです.. 私はメインスレッドで自分のゲーム全体を持っていて、addVlakno )そこに秒を数えることができるので、Mainで作成されたhraのインスタンスから毎秒メソッドを呼び出すことができるので、コンソールをクリアし、いくつかのメソッドを移動させます。静的メソッドから非静的メソッドを呼び出す静的メソッドで作成されたUSINGインスタンス

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との既存のインスタンスを持っている必要があります知っているが、私は主に作成されたインスタンスを使用する必要は可能ですか?いくつかの代表者、またはいくつかのポインタやather方法ですか?作成されたhraにはゲームのすべての値が含まれているため、それらを使用する必要があります。

メインの前にHra hra = new Hra();を入れようとしましたが、この場合はメインでも使用できませんでした。

+0

"この場合、メインでも使用できませんでした。これについてもう少し具体的に - 正確に何が起こったのですか(そしてコードはどのように見えましたか)? – UnholySheep

+2

'Main'の前に' static Hra hra = new Hra(); 'はありますか? – Tomer

+0

'Run()'の中で 'hra'を使うことはできません。' hra'は 'Main'の_local変数です。 'Run()'の中でこれにアクセスしたい場合は 'Program'クラス(' Main'メソッドの外側の 'static Hra hra;')に 'hra'を' static'変数として宣言する必要があります。それはあなたがしようとしていることによると必ずしも良い練習ではありませんが、そのテスト/練習プログラムのために行います。 –

答えて

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

作品、ありがとうございました。 – Ators

+0

@Ators:この回答があなたの問題を解決した場合、その左側のチェックマークを押して、それを受け入れたものとしてマークします。 –

2

静的メソッドは、他の静的変数やメソッドにのみアクセスすることができますので、あなたは現在hraにアクセスすることはできません。

static Hra hra = new Hra(); 

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

これは、あなたがRunhraにアクセスできるようになります:あなたはhraMainstaticとして宣言することができます。

関連する問題