Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用本例中的实例?_C#_Class_Instances - Fatal编程技术网

C# 如何正确使用本例中的实例?

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 =

我有多个类,我想在其他类中使用函数。但我面临一个问题,你可能知道如何解决它

第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;
  }
}
问题在于
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实例