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

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


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

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

8   голосов , оценка 4.25 из 5
Похожие ответы