如何在这个例子中正确使用实例?
How to properly use instances in this example?
我有多个 classes,我想使用其他 classes 中的功能。但我遇到了一个问题,你可能知道如何解决它。
Class 1 开头:
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
Class 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 竞技场:
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("");
如果我将其删除,一切正常,但我无法使用 class 中的任何内容。如果我这样使用,一旦 Master 和 Arena 表格打开,问题就会崩溃。如何正确实例化实例?
错误:
Make sure you do not an infinite loop or infinite recursion.
编辑:
我的问题是,由于 class Inicio 将从 Master 打开两个不同的实例,因此它将使用两个不同的 ips。当我运行这两个实例时,ip会先ip1.text再ip2.text。但是由于它们同时打开 return ip_drone 只会 return 最后一个值(在这种情况下 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;
}
你的问题中缺少一些代码,但对我来说它看起来像这样:
在每个新的 Master
class 中你初始化一个新的 Arena
实例:
Arena arena = new Arena();
然后,在每个新的 Arena
class 中你初始化一个新的 Master
class:
Master master = new Master("");
所以你似乎在初始化无限量的 Arena
和 Master
classes。每一个新的 Arena
都会有一个新的 Master
,而每一个新的 Master
都会有一个新的 Arena.
如果您想使用 Arena
和 Master
class 中的方法而不必一直创建实例,您应该将它们声明为 public static
.这使得它们无需声明 class 实例即可访问。
例如:
public class Arena
{
public static void DoSomething()
{
//Do something...
}
}
public class Master
{
public static void AnotherStaticMethod()
{
//Do something here too...
}
}
然后您将能够通过调用 Arena.DoSomething()
或 Master.AnotherStaticMethod()
.
来访问这些方法
如果我现在对问题的理解正确,我认为您需要为 Arena class 提供您想使用的 Master 的特定实例。目前,您正在分别在每个 classes 中创建全新的 Master 和 Arena 实例,这会导致无限循环(Master 创建和 Arena,它创建一个 Master,它创建和 Arena,等等。等等。永远)。
我认为这可能会解决问题:
Class 1 开头:
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();
Class 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 竞技场:
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;
}
}
我有多个 classes,我想使用其他 classes 中的功能。但我遇到了一个问题,你可能知道如何解决它。
Class 1 开头:
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
Class 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 竞技场:
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("");
如果我将其删除,一切正常,但我无法使用 class 中的任何内容。如果我这样使用,一旦 Master 和 Arena 表格打开,问题就会崩溃。如何正确实例化实例?
错误:
Make sure you do not an infinite loop or infinite recursion.
编辑: 我的问题是,由于 class Inicio 将从 Master 打开两个不同的实例,因此它将使用两个不同的 ips。当我运行这两个实例时,ip会先ip1.text再ip2.text。但是由于它们同时打开 return ip_drone 只会 return 最后一个值(在这种情况下 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;
}
你的问题中缺少一些代码,但对我来说它看起来像这样:
在每个新的 Master
class 中你初始化一个新的 Arena
实例:
Arena arena = new Arena();
然后,在每个新的 Arena
class 中你初始化一个新的 Master
class:
Master master = new Master("");
所以你似乎在初始化无限量的 Arena
和 Master
classes。每一个新的 Arena
都会有一个新的 Master
,而每一个新的 Master
都会有一个新的 Arena.
如果您想使用 Arena
和 Master
class 中的方法而不必一直创建实例,您应该将它们声明为 public static
.这使得它们无需声明 class 实例即可访问。
例如:
public class Arena
{
public static void DoSomething()
{
//Do something...
}
}
public class Master
{
public static void AnotherStaticMethod()
{
//Do something here too...
}
}
然后您将能够通过调用 Arena.DoSomething()
或 Master.AnotherStaticMethod()
.
如果我现在对问题的理解正确,我认为您需要为 Arena class 提供您想使用的 Master 的特定实例。目前,您正在分别在每个 classes 中创建全新的 Master 和 Arena 实例,这会导致无限循环(Master 创建和 Arena,它创建一个 Master,它创建和 Arena,等等。等等。永远)。
我认为这可能会解决问题:
Class 1 开头:
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();
Class 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 竞技场:
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;
}
}