私は複数のクラスを持っているので、他のクラスの関数を使いたいです。しかし、私は問題に直面しており、あなたはそれを解決する方法を知っているかもしれません。この例でインスタンスを正しく使用する方法は?
クラス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;
}
クラス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("");
である私はそれを削除した場合、すべてが動作しますが、Iそのクラスのものは使用できません。このように使用すると、フォームMasterとArenaが開いたら問題がクラッシュします。インスタンスを正しくインスタンス化するにはどうすればよいですか?
ERROR:
Make sure you do not an infinite loop or infinite recursion.
EDIT: 私の問題は、クラスINICIOは、マスターからの2つの異なるインスタンスが開きますので、2つの異なるIPを使用することです。 2つのインスタンスを実行すると、ipはip1.text、次にip2.textになります。しかし、彼らは同じ時間リターンで開くので、ip_droneだけ
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;
}
あなたは」アリーナは新しいMを作成するので無限ループを作り直すaster( 'マスターマスター=新しいマスター(" ");')それが呼び出されると、新しいアリーナ(「アリーナアリーナ=新しいアリーナ();」)が作成され、新しいアリーナを作成する新しいマスターが作成されます。あなたは、どのコードが何を開始するのかという論理を整理する必要があります。 – ADyson
アリーナはマスターのインスタンスを取るべきです: 'Arena arena = new Arena(マスター)' –
マスターとスレーブのコードは異なります。同じ3つのパラメータで2つの接続を持つことはできません。1)送信元IPアドレス2)宛先IPアドレス3)ポート番号。したがって、サーバーは競合を避けるためにIP.Anyで待機します。問題の根本原因は、例外が発生していることであり、クラスのインスタンスとは関係ありません。 – jdweng