Делегаты или вызов метода класса из другого класса - 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;
//...