1

互いに呼び出す一連のデリゲートを作成したいと考えています。これはマルチキャスト デリゲートに少し似ていますが、そうではありません。シリアル ニーズの「シリアル」です。各デリゲートの内部ロジックは、後続の各呼び出しは、マーシャリング メカニズムからではなく、前のデリゲートから行われる必要があることを示しています。

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

これは codegen を介して可能に見えますが、私はむしろそのようにしたくありません。

何か案は?

4

1 に答える 1

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();
    }
}

これは簡単なドラフトです。実際にこのコードをコンパイルしたり実行したりしていませんが、アイデアが得られるはずです。

于 2012-04-24T20:39:59.883 に答える