动态创建级联委托

时间:2012-04-24 03:43:41

标签: c# .net

我想写一系列相互调用的代表。它有点像多播委托,但不是这样 - 它是串行需要的“串行”。每个委托中的内部逻辑表示每个后续调用必须来自先前的委托,而不是来自编组机制。

示例

    [Test]
    public void Test2() {
        Action a = () => {
            Action b = () => {
                Action c = () => {
                    Console.WriteLine("test");
                };
                c.Invoke();
            };
            b.Invoke();
        };
        a.Invoke();
    }

这看起来可能是通过codegen,但我宁愿不这样做。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

代表链接列表怎么样?像这样:

public class Node
{
    protected Node Next { get; private set; }

    private Delegate m_actionDel;
    private object[] m_args;

    public Node(Node next, Delegate actionToPerform)
    {
        Next = next;
        m_actionDel = actionToPerform;
    }        

    public void InvokeChain()
    {
        try
        {
            m_actionDel.DynamicInvoke(m_args);
        }
        catch(Exception e)
        {
            // handle exception
        }

        if (Next != null)
            Next.InvokeChain();
    }
}

这只是一个快速草案,我实际上没有编译或运行此代码,但它应该给你一个想法。