デリゲートに保持する特定のオブジェクトタイプを宣言できます。これは、それを実行するか、現在実行するかを示すフラグとデータです。説明している内容は、コールバックといくつかのイベントデータによっても定義されるため、イベントと非常によく似ていることに注意してください。
呼び出すすべてのメソッドが同じシグニチャを持っていると仮定すると、骨格モデルは次のようになります(リフレクションを使用してさまざまなシグニチャが必要な場合は、これを回避できます)。
// 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();
}
}