Функции высших порядков

Функции высших порядков это вроде как тема из функционального программирования, но я видел это и в ООП-шном C#-пе. Что это такое и зачем оно нужно?

Функции высших порядков - это функции, которые принимают другие функции в качестве аргументов. Для того что бы осуществить технику каррирования, необходимо создать функцию высшего порядка. Кстати, в функциональном программировании все функции являются функциями высшего порядка. Приведу пример кода из поста про каррирование, где используется функция высшего порядка в виде делагата, который принимает другой делегат:

namespace Main
{
    using System;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Enter your number, please:");
        int myNumber = Convert.ToInt32(Console.ReadLine());

        MyAction.func = (number) => { return number; };
        MyAction.action = (number) => { Console.WriteLine($"\nThis number is: {MyAction.func.Invoke(myNumber)}"); };

        MyAction.action.Invoke(MyAction.func);
        Console.ReadKey();
    }
    public static class MyAction
    {
        public static Func<int, int> func;
        public static Action<Func<int, int>> action;
    }
}

}