我有一个程序与某种"宏管理器"可以(或至少应该)保存和播放宏 - 一个接一个。宏是用户可以自己选择的功能。
例如,如果用户想要创建新宏,他将执行以下步骤:
正如您所看到的,用户应该能够选择他想要动态使用的功能。
我尝试使用代表,但我真的不理解它们(即使我已经阅读过它)
所以这是我的代码:
MacroManager(它保存宏并一个接一个地播放):
namespace ControlCenter
{
public class ControlCenterMacroManager
{
public List<ControlCenterMacro> macroList = new List<ControlCenterMacro>();
public string macroName;
public void runMacroList()
{
Thread t = new Thread(new ThreadStart(runMacroList_t));
t.Start();
}
public void runMacroList_t()
{
foreach (ControlCenterMacro macro in macroList)
{
Console.Write("Playing Macro: ");
macro.Run();
}
}
}
}
这将是宏:
namespace ControlCenter
{
public class ControlCenterMacro
{
public bool isTimeout=false;
public int timemilli=0;
public delegate int macroAction();
public macroAction action;
public void Run()
{
if (isTimeout)
{
Console.Write("Waiting " + timemilli + " milliseconds ");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.WriteLine(" done");
}
else
{
Console.WriteLine("Playing action " + action.ToString());
action();
}
}
}
}
这是我想要放在它后面的一个可能的函数(它位于另一个项目的另一个类中):
public int turnOn()
{
Console.WriteLine("Einschalten:");
if(HomeMaticHttpRequest.sendRequest(this.url + "statechange.cgi?ise_id=" + this.RecieverId + "&new_value=true")!=null)
return 0;
return 1;
}
有没有人知道如何在没有太多硬编码的情况下解决这个问题? (希望保持相对动态)
答案 0 :(得分:0)
这是一个简单的小例子。
宏:
public class Macro
{
public delegate int macroAction();
public macroAction action;
public void Run()
{
action();
}
}
具有不同方法的容器类:
public class Container
{
public int turnOn()
{
Console.WriteLine("Einschalten");
return 1;
}
public int turnOff()
{
Console.WriteLine("Ausschalten");
return 1;
}
}
一个小型测试程序,它分配不同的方法:
void Main()
{
Container c = new Container();
List<Macro> MacroList = new List<Macro>();
for (int i = 0; i < 10; i++)
{
Macro m = new Macro();
if (i % 2 == 0)
{
m.action = c.turnOn;
}
else
{
m.action = c.turnOff;
}
MacroList.Add(m);
}
foreach (var m in MacroList)
{
m.Run();
}
}
对于更一般的版本我明天要回来,要抓住我的火车;)