Как добавлять в список методы разной сигнатуры? - C#

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

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

Нужно запомнить все выполненные методы в список, и потом выборочно их выполнять. Вот мой вариант с делегатами: Классы:
    class Class1
    {
        public string replaceSpaces(string a)
        {
            return a;
        }
    }
 
    class Class2
    {
        public int replaceInt(int n)
        {
            return n;
        }
    }
Мэйн:
namespace IsOnlyForMe
{
    public partial class Form1 : Form
    {
        delegate string strMod(string str);
        delegate int strMod2(int str);
 
        List<object> MyDelegatesList = new List<object>(); //Список из object куда буду сохранять экз. делегатов

        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            
            Class1 so = new Class1();
            // Создание экземпляра делегата.
            strMod strOp = new strMod(so.replaceSpaces);
 
            Class2 so2 = new Class2();
            
            strMod2 strOp2 = new strMod2(so2.replaceInt);
            MyDelegatesList.Add(strOp);
            MyDelegatesList.Add(strOp2);
            
            foreach (dynamic object item in MyDelegatesList)    //Использовал dynamic. Можно ли так?
            {
                if (item.GetType() == strOp.GetType())
                    textBox1.Text = item("Проверка работы методов.");  
            }
 
        }
    }
}
Все бы ничего да вот использование dynamic меня пугает. Я мало о нем знаю, но как то все слишком просто. Это не что-то из принципиально не использующегося, как оператор goto? Кстати нет строгого условия что методы должны сохраняться именно в списке. Просто моя задача: чтобы программа запоминала действия пользователя и потом сама их выполняла. Если знаете другой вариант как это сделать - подскажите пожалуйста!

Решение задачи: «Как добавлять в список методы разной сигнатуры?»

textual
Листинг программы
        void msg(string s)
        {
            MessageBox.Show(s);
        }
 
            List<Delegate> actions = new List<Delegate>();
            actions.Add(new Action<string>(msg));
            actions.Add(new Action<string>(msg));
            actions.Add(new Action<string>(msg));
            int i = 0;
            foreach (Delegate d in actions)
                d.DynamicInvoke(i++.ToString());

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


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

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

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