Ниже приведено лучшее понимание событий и наследования C #.И, вероятно, найти лучший, более эффективный или более правильный способ сделать это.
Допустим, я хочу расширить FormClosedEventArgs, чтобы добавить свойство строки для настраиваемого сообщения, и у меня есть две формы: Form1 и Form2.Form1 вызывает Form2.
Итак ...
public class CustomArgs : FormClosedEventArgs
{
public string Message { get; private set; }
public CustomArgs(CloseReason closeReason, string message) : base(closeReason)
{
Message = message;
}
}
В Form2 я переопределяю метод OnFormClosed
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(new CustomArgs(e.CloseReason,"customMessageString"));
}
Тогда в Form1 у меня есть что-то вроде этого:
private void Button1_Click(object sender, EventArgs e)
{
using(Form2 frm = new Form2())
{
frm.FormClosed += FormClosedEventHandler;
frm.ShowDialog();
}
}
и
private void FormClosedEventHandler(object sender, FormClosedEventArgs e)
{
Console.WriteLine(string.Format("CloseReason: {0}, Message: {1}.", e.CloseReason.ToString(), ((CustomArgs)e).Message));
}
Проблема в том, что я не чувствую себя комфортно при приведении FormClosedEventArgs в CustomArgs просто для получения свойства сообщения.Даже если я делаю что-то вроде следующего, это все равно кажется мне неправильным.
if (e is CustomArgs)
Console.WriteLine(string.Format("CloseReason: {0}, Message: {1}.", e.CloseReason.ToString(), ((CustomArgs)e).Message));
else
Console.WriteLine(string.Format("CloseReason: {0}", e.CloseReason));
Это правильный путь для достижения этого?Или я должен создать новое пользовательское закрытое событие, которое получает CustomArgs в качестве параметра и вызвать его в Form2, переопределяя OnFormClosed, чтобы в Form1 я мог подписаться на это новое событие?Кажется, немного излишним ради безопасности типа.
Любые объяснения, предложения или литература по этому вопросу будут высоко оценены.Спасибо!