Делегаты или вызов метода класса из другого класса - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! В попытке изучения c# наткнулся на такую проблему: 1. Зачем нужен делегат? Ведь я могу вызвать метод класса из другого класса и без него! 2. Вызывая метод делегатом или методом класса я могу только передать данные, но не изменить что-либо на форме? Для проверки создал форму и кинул на нее 2 кнопки, richBox, label При нажатии кнопки №2 должно вызываться изменение label1, вноситься запись в richBox и создаваться messageBox, но выполняется только последнее. Почему?
Листинг программы
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Threading;
  4. using System.Linq;
  5. namespace TestDelegate
  6. {
  7. public partial class MainForm : Form
  8. {
  9. public MainForm()
  10. {
  11. InitializeComponent();
  12. DataDelegat.EventHandler = new DataDelegat.MyEvent(labTXT);
  13. }
  14. void Button1Click(object sender, EventArgs e) // Кнопка для очистки полей
  15. {
  16. richTextBox1.Text = "";
  17. label1.Text = "empty";
  18. }
  19. public void labTXT (string strLab) // Метод, который будет выполняться из класса "TestDel"
  20. // через делегат и через "main.labTXT(str)"
  21. {
  22. label1.Text = strLab;
  23. richTextBox1.Text += strLab;
  24. checkBox1.Checked = false;
  25. MessageBox.Show(strLab);
  26. }
  27. void Button2Click(object sender, EventArgs e) // Вызываем метод соседнего класса
  28. {
  29. TestDel.methodTestDel(0, true);
  30. }
  31. }
  32. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  33. static class TestDel
  34. {
  35. public static void methodTestDel(int num, bool flag)
  36. {
  37. MainForm main = new MainForm();
  38. while (flag)
  39. {
  40. string str = num.ToString();
  41. string str1 = (num*2).ToString();
  42. num++;
  43. Thread.Sleep(100);
  44. DataDelegat.EventHandler(str); // Вызываем метод класса Main делегатом
  45. main.labTXT(str); // Вызываем метод класса Main "напрямую"
  46. if (num > 3) flag = false; // завершаем цикл
  47. }
  48. }
  49. }
  50. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  51. public static class DataDelegat // Отдельный класс для делегата
  52. {
  53. public delegate void MyEvent(string data);
  54. public static MyEvent EventHandler;
  55. }
  56. }
Помогите, пожалуйста, разобраться

Решение задачи: «Делегаты или вызов метода класса из другого класса»

textual
Листинг программы
  1. public static void methodTestDel(int num, bool flag, MainForm mainRef)
  2. {
  3.     MainForm main = mainRef;
  4.     //...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы