Я создал небольшой пример проекта, чтобы попытаться понять события. Я хочу в конечном итоге реализовать эти типы событий в моих будущих проектах, особенно при передаче данных из дочерней формы в родительскую форму ... это то, чем я часто занимаюсь. Мне сказали, что лучший способ сделать это, чтобы избежать связывания, это использовать события.
Мой код ниже правильного / обычного способа достижения этого?
// Subscriber
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
registerUserAccount registerAccount = new registerUserAccount();
registerAccount.onAccountCreated += onAccountRegister;
registerAccount.registerAccount();
}
public void onAccountRegister(object sender, AccountCreatedEventArgs e)
{
MessageBox.Show(e.username + " - " + e.password);
}
}
public delegate void accountCreatedEventHandler(object sender, AccountCreatedEventArgs e);
// Publisher
public class registerUserAccount
{
public event accountCreatedEventHandler onAccountCreated;
public registerUserAccount()
{
}
public void registerAccount()
{
// Register account code would go here
AccountCreatedEventArgs e = new AccountCreatedEventArgs("user93248", "0Po8*(Sj4");
onAccountCreated(this, e);
}
}
// Custom Event Args
public class AccountCreatedEventArgs : EventArgs
{
public String username;
public String password;
public AccountCreatedEventArgs(String _username, String _password)
{
this.username = _username;
this.password = _password;
}
}
Примечание. Приведенный выше код находится в одном и том же пространстве имен только для демонстрации и тестирования.
Пара вопросов тоже:
1) Я пытался заставить конструктор registerUserAccount вызвать метод registerAccount, но по какой-то причине он не выдал мне окно сообщения. Я предполагаю, что это потому, что метод registerAccount вызывается до того, как класс подпишется для прослушивания события?
2) Я пытался использовать методы в классе EventArgs, но он не позволял мне вызывать публичные методы. Это соглашение для доступа к свойствам, как у меня?
Спасибо