委托:顾名思义,让别人帮你办件事。委托是C#实现回调函数的一种机制。
那么,回调函数是什么呢?(C语言)
首先介绍一下函数指针,函数指针是指向函数的指针变量,一般的指针变量是指向一个普通变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数,传递参数。
而函数指针变量可以作为某个函数的参数来使用,回调函数就是一个通过函数指针调用的函数,简单讲:回调函数是由别人的函数执行时调用你实现的函数。
总的来说,C#的委托类似于C的函数指针,可以将函数作为参数传递,比较典型的应用实例例如创建回调函数。
委托的使用,首先要使用delegate关键字声明一个委托函数,并定义它的返回值和参数列表。
委托(Delegate)是存有对某个方法的引用的一种引用变量,引用可在运行时被改变,
特别用于实现事件和回调方法,所有的委托都派生于System.Delegate。
声明委托
在C#中使用一个类时,分两个阶段,首先,需要定义一个类,然后实例化类的一个对象(只需要静态方法除外)。使用委托也需要这两个步骤,首先必须要定义使用的委托,对于委托,定义委托就是告诉编译器这种类型的委托表示哪种类型的方法,然后,必须创建该委托的一个或多个实例,编译器在后台将创建表示该委托的一个类。
语法:
<权限修饰符> delegate <return type> <delegate-name> <parameter list>
举个例子:
internal delegate int DelegateTest (int a,int b)
使用委托的特点是。在定义调用委托的地方,并不确定将来委托会做什么,通常这样的程序设计会更加模块化,减少代码的耦合性,重用性更强。
泛型委托
C#的委托支持泛型参数,也就是泛型委托 ,修改我自己Lambda表达式文章里的例子:
链接:
C# Lamda 表达式 =>_djcxd的博客-CSDN博客
Action和Func
C#提供了Action和Func两个关键字,它们是预先定制的泛型委托,区别是Action无返回值,Func有返回值(返回值类型是最后一个泛型参数)。使用Action和Func主要是为了避免重复声明不同的委托类型,使用起来更方便。
- Action action; Action 相当于delegate void F();
- Action <int> action2; Action <int>相当于delegate void F(int) ;
- Func<int > func; Func<int> 相当于delegate int F();
- Func<int,int> func2; Func<int,int> 相当于delegate int F(int);
- Func<int,int,string> func3; Func<int,int,string>相当于delegate string. F(int,int);