Пытаясь понять пример стратегической модели Википедии с помощью нового Func <интервал, интервал, интервал>

Я смотрел на это, http://en.wikipedia.org/wiki/Strategy_pattern, и я понимаю понятие стратегической модели, но мог кто-то объяснять пример C# немного.

Я действительно не добираюсь, как и почему из определения 'Стратегии' в классе Контекста, почему это Func но затем всего два параметрических усилителя передаются в, например, 8,9?

static void Main(string[] args)
{

    var context = new Context();

    // Delegate
    var concreteStrategy1 = new Func(PerformLogicalBitwiseOr);

    // Anonymous Delegate
    var concreteStrategy2 = new Func(
        delegate(int op1, int op2)
        {
            return op1 & op2;
        });

    // Lambda Expressions
    var concreteStrategy3 = new Func((op1, op2) => op1 >> op2);
    var concreteStrategy4 = new Func((op1, op2) => op1 << op2);

    context.Strategy = concreteStrategy1;
    var result1 = context.Execute(8, 9);

    context.Strategy = concreteStrategy2;
    var result2 = context.Execute(8, 9);

    context.Strategy = concreteStrategy3;
    var result3 = context.Execute(8, 1);

    context.Strategy = concreteStrategy4;
    var result4 = context.Execute(8, 1);

}

static int PerformLogicalBitwiseOr(int op1, int op2)
{
    return op1 | op2;
}

class Context
{
    public Func Strategy { get; set; }

    public T Execute(T operand1, T operand2)
    {
        return this.Strategy != null
            ? this.Strategy(operand1, operand2)
            : default(T);
    }
}

7
задан Lazer 26 June 2010 в 11:59
поделиться

4 ответа

ATRESSASTAUSSIE Ответ является правильным, но обычно более короткий метод - просто обратить внимание на одну осью:

plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])

, где функция GCA () возвращает экземпляр текущих осей и [:: - 1] меняет список.

-121--599951-

A ФУНК представляет собой делегат в виде:

TResult function(T1 arg1, T2 arg2)

, так что FUNC имеет 2 типа аргументов и 1 тип возврата. Поэтому при потреблении функции функции вы напечатаете

 (arg1, arg2) => return new TResult();
9
ответ дан 6 December 2019 в 19:36
поделиться

FUNC - это функция, которая принимает два аргумента INT и возвращает INT - последний тип В определении функции функции это тип возврата.

3
ответ дан 6 December 2019 в 19:36
поделиться

A ФУНК - это делегат. Делегат - это тип, который представляет собой одну функцию. В C # вы можете использовать такие функции, вместо того, чтобы объявлять определенный интерфейс. Если вы хотите, вы могли бы использовать интерфейс, который будет выглядеть что-то подобное:

interface IStrategy
{
     T Compute<T1, T2>();
}
1
ответ дан 6 December 2019 в 19:36
поделиться
0
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: