2016-07-07 5 views
0

Мой код довольно прост. Когда я нажимаю кнопку в первом классе, он создает два экземпляра Мастера и один экземпляр Арены. Арене необходимо получать информацию от обоих экземпляров Master, а Arena необходимо отправить информацию в каждый экземпляр Master, но информация не является одинаковой для обоих экземпляров Master.C# - Обмен информацией между экземплярами

//When I press a button... 
master = new Master(ip1.Text); 
master.Show(); 

slave = new Master(ip2.Text); 
slave.Show(); 

arena = new Arena(master,slave); 
arena.Show(); 

ARENA CLASS:

private Master master; 
private Master slave; 

public Arena(Master master,Master slave) 
{ 
    InitializeComponent(); 
    this.master = master; 
    this.slave = slave; 

} 

Мой вопрос:

Я могу создать новую арену (ведущий, ведомый), потому что мастер экземпляры и ведомое созданы ранее. Но мне нужно использовать что-то вроде:

master = new Master(ip1.Text,arena); 
master.Show(); 

slave = new Master(ip2.Text,arena); 
slave.Show(); 

arena = new Arena(master,slave); 
arena.Show(); 

Но я не могу это сделать, потому что, когда ведущие и ведомые экземпляры создаются, арена = нуль. FIXED !!

EDIT:

У меня есть экземпляр под названием Арена, которая принимает экземпляры Ведущий и ведомый в качестве аргумента.

private Master master; 
    private Master slave; 

    public Arena(Master master,Master slave) 
    { 
     InitializeComponent(); 
     this.master = master; 
     this.slave = slave; 

    } 

Мой вопрос в том, как я могу вернуть разные значения для ведущего и ведомого. Например:

public int missao_enviada; 


private void btn_enviar_Click(object sender, EventArgs e) 
{ 
missao_enviada = 1; 
} 

    public int enviou_missao() 
    { 
     return missao_enviada; 
    } 

Но я только хочу, чтобы вернуться к missao_enviada Мастер экземпляр и не рабовладельца экземпляр.

Есть ли способ сделать это?

+0

Простым фактом является то, что вы не можете вызвать оба конструктора и выполнить все зависимости, выполненные таким образом. Вам нужно будет добавить методы для установки значений (или просто установить свойства напрямую) на одно из двух определений классов. – Charleh

+0

Да. Это был пример. Я хочу включить арену экземпляра в master и slave, поэтому я могу использовать функции. –

+1

Итак, ваше решение состоит в том, чтобы добавить геттер/сеттеры для этих свойств на 'Arena' (или методы их установки) – Charleh

ответ

1

Вы должны назначить Арена ведущий и ведомый в конструкторе Арены

private Master master; 
private Master slave; 

public Arena(Master master,Master slave) 
{ 
    InitializeComponent(); 
    this.master = master; 
    this.slave = slave; 

    master.Arena = this; 
    slave.Arena = this; 
} 

Вы должны изменить свой мастер класса и добавить к нему свойство Arena

public class Master 
{ 
    public Arena Arena { set; get;} 
} 
+0

нет мастера.Arena метод –

+0

@TiagoSilva вы должны добавить свойство Arena к Мастер-классу – Kahbazi

+0

Спасибо. Кажется, это решение. –

3

Это что-то вы хотите?

arena = new Arena(); 
    master = new Master(ip1.Text,arena); 
    master.Show(); 

    slave = new Master(ip2.Text,arena); 
    slave.Show(); 

    arena.SetMaster(master); 
    arena.SetSlave(slave); 

    arena.Show(); 

Согласно комментарий (внутри Arena класса):

// Empty constructor 
public Arena() 
{ 
    InitializeComponent(); 
    // Do your stuff... 
} 

public void SetMaster(Master m) // Or use property; create similar for SetSlave 
{ 
    master = m; 
} 
+0

Я попробую. Я отвечаю в ближайшее время. Благодарю. –

+0

Существует ничего, что называется SetMaster или SetSlave. И когда я создаю арену = новая Arena(); выдает ошибку, говоря, что аргументов недостаточно. –

+0

@TiagoSilva Ну, тогда вы также можете создать пустой конструктор. И методы setter, которые вам нужно добавить. –

0

Возможно, лучшим решением будет создание статического класса со статическими переменными, которые будут использоваться во всех основных и ведомых устройствах. Другим решением может быть создание базы данных SQL light.

+0

Я не могу создать статические поля, потому что информация о главном и подчиненном устройствах различна. –