Как “присвоить” функцию в переменную?

217
03 сентября 2018, 12:50

Здравствуйте как "присвоить" функцию в переменную:

Есть мат. функции: int sum(a,b); int sub(a,b); int div(a,b)

Есть код:

void main(){
   operation = sum;
}
var operation;
int calc(a,b)
{
   ...
   operation(a,b);
   ...
}

P.S. Я знаю, как передать функцию в виде аргумента, но тут другая ситуация и нужно именно функцию "присвоить" переменной.

Answer 1

Чтобы присвоить функцию переменной, нужно чтобы переменная имела тип делегата, который описывает в точности такую же сигнатуру функции.

Вот пример с двумя вариантами:

class Program
{
    //Можно явно создать делегат, описывающий нужную сигнатуру
    delegate int MathOperation(int a, int b);
    //И использовать его как тип
    static MathOperation Operation1;
    //Либо не создавать явно делегат, а использовать Func<in T1, in T2, out TResult>
    static Func<int, int, int> Operation2;
    static void Main(string[] args)
    {
        Operation1 = Sub;
        var sub = Operation1(10, 5);
        Operation2 = Sum;
        var sum = Operation2(10, 5);
    }
    static int Sub(int a, int b)
    {
        return a - b;
    }
    static int Sum(int a, int b)
    {
        return a + b;
    }
}
READ ALSO
Фильтры с DI в ASP.NET Core

Фильтры с DI в ASP.NET Core

В чем отличие ServiceFilterAttribute от TypeFilterAttribute? Ну кроме того что второй не надо регистрировать в контейнереИ где какой использовать?

242
Разветвление сайта

Разветвление сайта

Представьте ситуацию, когда при входе на сайт выдается модальное окно и спрашивает вы хотите перейти на сайт кока кола или пепси? При клике...

258
Чтение файла по частям

Чтение файла по частям

Есть вот такой метод, который читает по частям файл

232
Unity: проблема управления через джойстик

Unity: проблема управления через джойстик

Уже третий день мучаюсь с управлением для мобильной игрыЯ хочу реализовать управление через джойстик

253