如何正确使用此示例中的实例?

时间:2016-07-04 16:16:11

标签: c# class instances

我有多个类,我想在其他类中使用这些函数。但是我遇到了一个问题,你可能知道如何解决它。

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;
    }

2 个答案:

答案 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("");

因此,您似乎正在初始化无限量的ArenaMaster类。对于每个新的Arena,都会有一个新的Master,而对于每个新Master,都会有一个新的Arena.

如果要使用ArenaMaster类中的方法而不必一直创建实例,则应将它们声明为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()来访问这些方法。