Делегаты или вызов метода класса из другого класса - C#
Формулировка задачи:
Добрый день!
В попытке изучения c# наткнулся на такую проблему:
1. Зачем нужен делегат? Ведь я могу вызвать метод класса из другого класса и без него!
2. Вызывая метод делегатом или методом класса я могу только передать данные, но не изменить что-либо на форме?
Для проверки создал форму и кинул на нее 2 кнопки, richBox, label
При нажатии кнопки №2 должно вызываться изменение label1, вноситься запись в richBox и создаваться messageBox, но выполняется только последнее. Почему?
Помогите, пожалуйста, разобраться
Листинг программы
- using System;
- using System.Windows.Forms;
- using System.Threading;
- using System.Linq;
- namespace TestDelegate
- {
- public partial class MainForm : Form
- {
- public MainForm()
- {
- InitializeComponent();
- DataDelegat.EventHandler = new DataDelegat.MyEvent(labTXT);
- }
- void Button1Click(object sender, EventArgs e) // Кнопка для очистки полей
- {
- richTextBox1.Text = "";
- label1.Text = "empty";
- }
- public void labTXT (string strLab) // Метод, который будет выполняться из класса "TestDel"
- // через делегат и через "main.labTXT(str)"
- {
- label1.Text = strLab;
- richTextBox1.Text += strLab;
- checkBox1.Checked = false;
- MessageBox.Show(strLab);
- }
- void Button2Click(object sender, EventArgs e) // Вызываем метод соседнего класса
- {
- TestDel.methodTestDel(0, true);
- }
- }
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- static class TestDel
- {
- public static void methodTestDel(int num, bool flag)
- {
- MainForm main = new MainForm();
- while (flag)
- {
- string str = num.ToString();
- string str1 = (num*2).ToString();
- num++;
- Thread.Sleep(100);
- DataDelegat.EventHandler(str); // Вызываем метод класса Main делегатом
- main.labTXT(str); // Вызываем метод класса Main "напрямую"
- if (num > 3) flag = false; // завершаем цикл
- }
- }
- }
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- public static class DataDelegat // Отдельный класс для делегата
- {
- public delegate void MyEvent(string data);
- public static MyEvent EventHandler;
- }
- }
Решение задачи: «Делегаты или вызов метода класса из другого класса»
textual
Листинг программы
- public static void methodTestDel(int num, bool flag, MainForm mainRef)
- {
- MainForm main = mainRef;
- //...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д