您可以声明要保存在委托中的特定对象类型、指示是否执行此操作或现在执行此操作的标志以及数据。请注意,您所描述的内容与事件非常相似,因为它们也是由回调和一些事件数据定义的。
骨架模型看起来像这样,假设您要调用的所有方法都具有相同的签名(如果您需要使用反射来获得一大堆不同的签名,您可以解决这个问题):
// This reflects the signature of the methods you want to call
delegate void theFunction(ActionData data);
class ActionData
{
// put whatever data you would want to pass
// to the functions in this wrapper
}
class Action
{
public Action(theFunction action, ActionData data, bool doIt)
{
this.action = action;
this.data = data;
this.doIt = doIt;
}
public bool doIt
{
get;
set;
}
public ActionData data
{
get;
set;
}
public theFunction action
{
get;
set;
}
public void run()
{
if (doIt)
action(data);
}
}
一个常规的用例看起来像这样:
class Program
{
static void someMethod(ActionData data)
{
Console.WriteLine("SUP");
}
static void Main(string[] args)
{
Action[] actions = new Action[] {
new Action(Program.someMethod, new ActionData(), true)
};
foreach(Action a in actions)
a.run();
}
}