Как добавлять в список методы разной сигнатуры? - C#
Формулировка задачи:
Нужно запомнить все выполненные методы в список, и потом выборочно их выполнять.
Вот мой вариант с делегатами:
Классы:
Мэйн:
Все бы ничего да вот использование dynamic меня пугает. Я мало о нем знаю, но как то все слишком просто.
Это не что-то из принципиально не использующегося, как оператор goto?
Кстати нет строгого условия что методы должны сохраняться именно в списке. Просто моя задача: чтобы программа запоминала действия пользователя и потом сама их выполняла.
Если знаете другой вариант как это сделать - подскажите пожалуйста!
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("Проверка работы методов.");
}
}
}
}Решение задачи: «Как добавлять в список методы разной сигнатуры?»
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());