2016-07-07 11 views
0

私のコードは非常に簡単です。ファーストクラスのボタンをクリックすると、マスターとアリーナの2つのインスタンスが作成されます。アリーナは両方のマスターインスタンスから情報を受け取る必要があり、アリーナは各マスターインスタンスに情報を送信する必要がありますが、情報は両方のマスターインスタンスで同じではありません。C# - インスタンス間で情報を共有

//When I press a button... 
master = new Master(ip1.Text); 
master.Show(); 

slave = new Master(ip2.Text); 
slave.Show(); 

arena = new Arena(master,slave); 
arena.Show(); 

ARENAのCLASS:

private Master master; 
private Master slave; 

public Arena(Master master,Master slave) 
{ 
    InitializeComponent(); 
    this.master = master; 
    this.slave = slave; 

} 

私の質問は:

インスタンスのマスターとスレーブが前に作成されているので、私は新しいアリーナ(マスター、スレーブ)を作成することができます。しかし、私はのようなものを使用する必要があります:

master = new Master(ip1.Text,arena); 
master.Show(); 

slave = new Master(ip2.Text,arena); 
slave.Show(); 

arena = new Arena(master,slave); 
arena.Show(); 

をしかし、私は、マスタとスレーブのインスタンスが作成されるとき、アリーナ= nullのため、これを行う傾けます。 固定!

EDIT:

私は、引数としてインスタンスマスターとスレーブを受信アリーナと呼ばれるインスタンスを持っています。

private Master master; 
    private Master slave; 

    public Arena(Master master,Master slave) 
    { 
     InitializeComponent(); 
     this.master = master; 
     this.slave = slave; 

    } 

私の質問は、どのように私はマスターとスレーブの異なる値を返すことができます。たとえば :

public int missao_enviada; 


private void btn_enviar_Click(object sender, EventArgs e) 
{ 
missao_enviada = 1; 
} 

    public int enviou_missao() 
    { 
     return missao_enviada; 
    } 

しかし、私は唯一のマスターインスタンスをマスターとスレーブのインスタンスをマスターしないようにmissao_enviadaを返したいです。

これを行う方法はありますか?

+0

単純な事実ですが、両方のコンストラクタを呼び出すことはできず、すべての依存関係をこのように満たすことはできません。 – Charleh

+0

はいの2つのクラス定義のいずれかに値を設定するメソッドを追加するか、またはプロパティを直接設定する必要があります。それは例だった。私はマスターとスレーブにインスタンスのアリーナを含めるので、私は関数を使用することができます。 –

+1

あなたの解決策は、これらのプロパティのゲッター/セッターを 'Arena'(またはそれらを設定するメソッド)に追加することです。 – Charleh

答えて

1

あなたは、アリーナは、マスターとスレーブアリーナのコンストラクタメソッドに割り当てる必要があります

private Master master; 
private Master slave; 

public Arena(Master master,Master slave) 
{ 
    InitializeComponent(); 
    this.master = master; 
    this.slave = slave; 

    master.Arena = this; 
    slave.Arena = this; 
} 
あなたのマスターを変更する必要があります

クラスに追加し、アリーナのプロパティを追加します

public class Master 
{ 
    public Arena Arena { set; get;} 
} 
+0

マスターはありません。アリーナメソッド –

+0

@TiagoSilvaマスタークラスにアリーナプロパティを追加する必要があります – Kahbazi

+0

ありがとうございます。これは解決策のようです。 –

3

これは何ですか?

arena = new Arena(); 
    master = new Master(ip1.Text,arena); 
    master.Show(); 

    slave = new Master(ip2.Text,arena); 
    slave.Show(); 

    arena.SetMaster(master); 
    arena.SetSlave(slave); 

    arena.Show(); 

コメントを1として(Arenaクラス内):

// Empty constructor 
public Arena() 
{ 
    InitializeComponent(); 
    // Do your stuff... 
} 

public void SetMaster(Master m) // Or use property; create similar for SetSlave 
{ 
    master = m; 
} 
+0

私はしようとします。私はすぐに返信します。ありがとう。 –

+0

SetMasterまたはSetSlaveというものはありません。そして、アリーナ=新しいアリーナ()を作成すると、十分な引数がないというエラーを投げます。 –

+0

@TiagoSilvaそれでは、空のコンストラクタも作成できます。また、追加する必要があるセッターメソッドもあります。 –

0

もっと良い解決策は、すべてのマスターとスレーブにわたって使用される静的変数を持つ静的クラスを作成することでしょう。別の解決策は、SQLの光データベースを作成することです。

+0

マスターとスレーブの情報が異なるため、静的フィールドを作成できません。 –

関連する問題