使用“中间洞”模式

时间:2011-03-10 02:45:00

标签: c# design-patterns lambda


我刚刚遇到了“中间的洞”模式,并且认为我可以使用它来删除一些重复的代码,特别是当我尝试对不同的方法进行基准测试并在每种方法之前和之后使用相同的代码时。

我能够使用下面的代码了解基础知识。我从 StartingMethod 开始,其主要目标是调用 MainMethod1 & MainMethod2 ,但它是通过 PrePostMethod 完成的。

我现在想知道的是如何传递参数并获得返回值。任何帮助都会很棒。

感谢。

代码:

public static class HoleInTheMiddle
    {
        public static void StartingMethod()
        {
            PrePostMethod(MainMethod1);
            PrePostMethod(MainMethod2);
        }

        public static void PrePostMethod(Action someMethod)
        {
            Debug.Print("Pre");

            someMethod();

            Debug.Print("Post");
        }

        public static void MainMethod1()
        {
            Debug.Print("This is the Main Method 1");
        }

        public static void MainMethod2()
        {
            Debug.Print("This is the Main Method 2");
        }
    }

1 个答案:

答案 0 :(得分:2)

您可以创建泛型方法并使用泛型委托:

public static TResult PrePostMethod<T1, T2, TResult>(Func<T1, T2, TResult> someMethod, T1 a, T2 b)
{
    Debug.Print("Pre");

    var result = someMethod(a, b);

    Debug.Print("Post");

    return result;
}

每个参数都需要一个单独的泛型重载。