在我看来,高阶函数是指接受另一个函数并使用它来抽象出某些行为的函数,例如这个C#扩展方法:
public static IEnumerable<T> OrderByProperty<T>(this IEnumerable<T> items, Func<T, object> selector)
{
return items.Select(x => new { o = selector(x), item = x })
.OrderBy(x => x.o)
.Select(x=> x.item);
}
它需要一个函数来确定在排序集合时考虑哪个属性。使用示例:
var orderedByA = Enumerable.Range(0, 100)
.Select(x=> new Item{
A = x,
B = 100 - x
})
.OrderByProperty(x => x.A);
回调函数则可以在需要执行异步或长时间操作时用于继续应用程序流程,例如。
void FirstAsync(){
Task.Run(()=>{
Thread.Sleep(1000);
Console.WriteLine("First executed");
});
}
void Second()
{
Console.WriteLine("Second executed");
}
void FirstV2(Action callback)
{
Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("First executed");
callback?.Invoke();
});
}
void Main()
{
FirstAsync();
Second();
Thread.Sleep(2000);
FirstV2(Second);
}
上面程序的输出将会是这样的:
Second executed
First executed
First executed
Second executed