我有多个类,我想在其他类中使用这些函数。但是我遇到了一个问题,你可能知道如何解决它。
Class 1 Inicio:
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
2级硕士:
Arena arena = new Arena();
public Master(string ip) //Inicio
{
InitializeComponent();
_droneClient = new DroneClient("192.168.1." + ip);
ip_drone = "192.168.1." + ip;
Point p2 = arena.posicao_desej();
posicao_desejada = p2;
public string ip_dron()
{
return ip_drone;
}
Class 3 Arena:
Master master = new Master(""); //What do I insert here? I dont want to iniciate it again
string ip = master.ip_dron();
ip_drone = ip;
问题出在Master master = new Master("");
如果我删除它一切正常但我不能使用该类中的任何内容。如果我使用这样的话,一旦表格Master和Arena打开,问题就会崩溃。如何正确实例化实例?
ERROR:
确保没有无限循环或无限递归。
修改: 我的问题是,因为类Inicio将从Master打开两个不同的实例,它将使用两个不同的ips。当我运行这两个实例时,ip将是ip1.text然后是ip2.text。但由于它们同时打开,返回ip_drone只会返回最后一个值(在本例中为ip2.text)
public Master(string ip) //Inicio
{
InitializeComponent();
_droneClient = new DroneClient("192.168.1." + ip);
ip_drone = "192.168.1." + ip;
}
public string ip_dron()
{
return ip_drone;
}
答案 0 :(得分:2)
如果我现在正确理解了这个问题,我认为您需要为您的Arena类提供您想要使用的Master的特定实例。目前你正在分别在每个类中创建Master和Arena的全新实例,这导致无限循环(Master创建和Arena,创建Master,创建和Arena等等永远)。
我认为这可以解决问题:
Class 1 Inicio:
Master master = new Master(ip1.Text);
Master slave = new Master(ip2.Text);
Arena arena = new Arena(master, slave); //here we pass specific instances of Master to the Arena class for later use.
arena.Show();
2级硕士:
class Master
{
public Master(string ip)
{
InitializeComponent();
_droneClient = new DroneClient("192.168.1." + ip);
ip_drone = "192.168.1." + ip;
Point p2 = arena.posicao_desej();
posicao_desejada = p2;
}
public string ip_dron()
{
return ip_drone;
}
}
Class 3 Arena:
class Arena
{
private Master master;
private Master slave;
public Arena(Master master, Master slave) //hint: maybe Master is not such a good name for the class...but that's another story
{
//here we assign the instances passed in to our internal variables, so we can reference them within the Arena class itself.
this.master = master;
this.slave = slave;
}
//and then for example (this may not be what you really want to do):
public string Show()
{
string masterIP = this.master.ip_dron();
string slaveIP = this.slave.ip_dron();
return "master IP: " + masterIP + ", Slave IP: " + slaveIP;
}
}
答案 1 :(得分:0)
你的问题中缺少一些代码,但对我而言,它看起来像这样:
在每个新Master
课程中,您初始化一个新的Arena
实例:
Arena arena = new Arena();
然后,在每个新的Arena
课程中,您初始化一个新的Master
课程:
Master master = new Master("");
因此,您似乎正在初始化无限量的Arena
和Master
类。对于每个新的Arena
,都会有一个新的Master
,而对于每个新Master
,都会有一个新的Arena.
如果要使用Arena
和Master
类中的方法而不必一直创建实例,则应将它们声明为public static
。这使得它们无需声明类实例即可访问。
例如:
public class Arena
{
public static void DoSomething()
{
//Do something...
}
}
public class Master
{
public static void AnotherStaticMethod()
{
//Do something here too...
}
}
然后,您可以通过调用Arena.DoSomething()
或Master.AnotherStaticMethod()
来访问这些方法。