Использование шаблона «Отверстие посередине» - PullRequest
1 голос
/ 10 марта 2011


Я только что наткнулся на шаблон «Отверстие посередине» и думаю, что могу использовать его для удаления некоторого повторяющегося кода, особенно когда я пытаюсь сравнить различные методы и использовать один и тот же код до и после каждого метода.

Мне удалось получить основы работы с кодом ниже.Я начинаю с 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 Ответ

2 голосов
/ 10 марта 2011

Вы можете создать универсальный метод и использовать универсальный делегат:

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

Вам потребуется отдельная универсальная перегрузка для каждого числа параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...