我的代码非常简单。当我单击第一个类中的按钮时,它会创建两个Master实例和一个Arena实例。 Arena需要从Master实例接收信息,并且Arena需要向每个Master实例发送信息,但两个Master实例的信息不同。
//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;
}
我的问题是:
我可以创建新的Arena(master,slave),因为之前创建了master和slave实例。但我需要使用类似的东西:
master = new Master(ip1.Text,arena);
master.Show();
slave = new Master(ip2.Text,arena);
slave.Show();
arena = new Arena(master,slave);
arena.Show();
但我不能这样做,因为当创建主实例和从属实例时,arena = null。 的 FIXED !!
修改
我有一个名为Arena的实例,它接收Master和Slave实例作为参数。
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返回到Master master实例而不是Master slave实例。
有办法做到这一点吗?
答案 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();
根据评论(在Arena
类内):
// Empty constructor
public Arena()
{
InitializeComponent();
// Do your stuff...
}
public void SetMaster(Master m) // Or use property; create similar for SetSlave
{
master = m;
}
答案 1 :(得分:1)
你应该在Arena的构造函数方法中将Arena分配给Master和Slave
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;
}
您应修改您的Master类并向其添加Arena属性
public class Master
{
public Arena Arena { set; get;}
}
答案 2 :(得分:0)
也许更好的解决方案是创建一个静态变量的静态类,它将在所有主服务器和从服务器上使用。另一种解决方案可能是创建SQL light数据库。