C# 如何正确使用本例中的实例?
我有多个类,我想在其他类中使用函数。但我面临一个问题,你可能知道如何解决它 第1类Inicio:C# 如何正确使用本例中的实例?,c#,class,instances,C#,Class,Instances,我有多个类,我想在其他类中使用函数。但我面临一个问题,你可能知道如何解决它 第1类Inicio: Master master = new Master(ip1.Text); master.Show(); Master slave = new Master(ip2.Text); slave.Show(); Arena arena = new Arena(); arena.Show(); Master master = new Master(ip1.Text); Master slave =
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
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();
二级硕士:
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 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;
}
}
三级竞技场:
Master master = new Master(""); //What do I insert here? I dont want to iniciate it again
string ip = master.ip_dron();
ip_drone = ip;
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;
}
}
问题在于Master-Master=新Master(“”)代码>如果我删除它,一切都会正常,但我不能使用该类中的任何内容。如果我这样使用,一旦forms Master和Arena打开,问题就会崩溃。如何正确实例化实例
错误:
请确保不要使用无限循环或无限递归
编辑:
我的问题是,由于类Inicio将从Master打开两个不同的实例,因此它将使用两个不同的IP。当我运行这两个实例时,ip将是ip1.text,然后是ip2.text。但由于它们同时打开返回ip_,无人机将只返回最后一个值(在本例中为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
类中,初始化一个新的Arena
实例:
Arena arena = new Arena();
然后,在每个新的Arena
类中初始化一个新的Master
类:
Master master = new Master("");
因此,您似乎正在初始化无限多的Arena
和Master
类。每一个新的竞技场
都会有一个新的大师
,每一个新的大师
都会有一个新的竞技场。
如果您想使用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()
来访问这些方法。您的问题中缺少一些代码,但在我看来是这样的:
在每个新的Master
类中,初始化一个新的Arena
实例:
Arena arena = new Arena();
然后,在每个新的Arena
类中初始化一个新的Master
类:
Master master = new Master("");
因此,您似乎正在初始化无限多的Arena
和Master
类。每一个新的竞技场
都会有一个新的大师
,每一个新的大师
都会有一个新的竞技场。
如果您想使用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()
来访问这些方法。如果我现在正确地理解了这个问题,我认为您需要为您的Arena类提供要使用的Master的特定实例。目前,你正在分别在这些类中创建全新的Master和Arena实例,这导致了无限循环(Master创建和Arena,它创建一个Master,它创建和Arena,等等,永远)
我认为这可以解决问题:
第1类Inicio:
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
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();
二级硕士:
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 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;
}
}
三级竞技场:
Master master = new Master(""); //What do I insert here? I dont want to iniciate it again
string ip = master.ip_dron();
ip_drone = ip;
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;
}
}
如果我现在正确理解了这个问题,我认为您需要向Arena类提供您想要使用的Master的特定实例。目前,你正在分别在这些类中创建全新的Master和Arena实例,这导致了无限循环(Master创建和Arena,它创建一个Master,它创建和Arena,等等,永远)
我认为这可以解决问题:
第1类Inicio:
Master master = new Master(ip1.Text);
master.Show();
Master slave = new Master(ip2.Text);
slave.Show();
Arena arena = new Arena();
arena.Show();
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();
二级硕士:
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 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;
}
}
三级竞技场:
Master master = new Master(""); //What do I insert here? I dont want to iniciate it again
string ip = master.ip_dron();
ip_drone = ip;
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;
}
}
您正在创建一个无限循环,因为Arena创建了一个新的主控(Master Master=new Master(“”;
)。调用时,它会创建一个新竞技场(Arena Arena=new Arena();
)…然后创建一个新的大师,这将创建一个新竞技场..以此类推,直到永远。你需要理清什么代码应该启动什么。竞技场应该以Master为例:Arena Arena=new Arena(Master)
主代码和从代码是不同的。不能有两个具有相同3个参数的连接1)源IP地址2)目标IP地址3)端口号。因此,服务器侦听IP.Any以避免冲突。问题的根本原因是发生了异常,与类的实例无关。我不想在Master和Arena中创建新实例。我只想使用这些类中的函数。@TiagoSilva然后将要使用的特定实例传递到要在其中使用它们的类中。您正在创建一个无限循环,因为Arena创建了一个新的主控(Master Master=new Master(“”;
)。调用时,它会创建一个新竞技场(Arena Arena=new Arena();
)…然后创建一个新的大师,这将创建一个新竞技场..以此类推,直到永远。你需要理清什么代码应该启动什么。竞技场应该以Master为例:Arena Arena=new Arena(Master)
主代码和从代码是不同的。不能有两个具有相同3个参数的连接1)源IP地址2)目标IP地址3)端口号。因此,服务器侦听IP.Any以避免冲突。问题的根本原因是发生了异常,与类的实例无关。我不想在Master和Arena中创建新实例。我只想使用这些类中的函数。@TiagoSilva然后将要使用的特定实例传递到要在其中使用它们的类中。代码非常简单。有一个名为Inicio的WindowsForm,当我单击一个按钮时,它会打开两个Ma实例