我有此代码:
CHANGE_WIFI_STATE
如何在Method1()中触发操作列表中所有操作的执行?我无法根据固定大小检查列表,因为列表中可以有任何数字?唯一可以确定的是DoStuff1将在那里。
链接顺序应该相同,所以我不能调用a.Method3()。Method2()。Method1()
基本上我希望能够做这样的事情:
public class A
{
private List<Action> operations = new List<Action>();
public A Method1()
{
//some code here
operations.Add(DoStuff1);
//some more code here
return this;
}
public A Method2()
{
//some code here
operations.Add(DoStuff2);
//some more code here
return this;
}
public A Method3()
{
//some code here
operations.Add(DoStuff3);
//some more code here
return this;
}
private void DoStuff1() { }
private void DoStuff2() { }
private void DoStuff3() { }
}
a.Method1().Method2().Method3();
答案 0 :(得分:0)
您的类型不需要知道/猜测。将Action实例添加到每个相关调用的列表中。让您的类/类型公开一个名为Execute
的方法(选择一个适当的名称)。该调用将遍历动作列表(在这种情况下为相反的顺序)并执行它们。调用方负责调用该方法,就像调用方负责调用其他方法开始一样。
public class A
{
private List<Action> operations = new List<Action>();
public A Method1()
{
operations.Add(DoStuff1);
return this;
}
public A Method2()
{
operations.Add(DoStuff2);
return this;
}
public A Method3()
{
operations.Add(DoStuff3);
return this;
}
public void Execute()
{
operations.Reverse();
foreach(var operation in operations)
operation();
operations.Clear();
}
private void DoStuff1() { }
private void DoStuff2() { }
private void DoStuff3() { }
}
a.Method1().Method2().Method3().Execute();
或
a = a.Method1().Method2().Method3();
a.Execute();
或
a.Method1();
a.Method2();
a.Method3();
a.Execute();
等