什么是委托
委托实质上可以理解为是用来装函数的。关键字是delegate
委托的声明:[修饰符]delegate [返回值] 委托名[参数]
几点说明:
1.修饰符一般是public,不写的话默认也是public。
2.如果用委托来装函数的话一定要是匹配的,我们通过下文来理解这句话。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 委托
{
delegate void fun();//只能容纳返回值为空且没有参数的函数。
delegate int fun2(int i);//只能容纳返回值为int且带有一个参数的函数。
class person
{
public fun f3;
public fun2 f4;
}
internal class Program
{
static void Main(string[] args)
{
//法一:
fun f1 = new fun(speak);
f1.Invoke();//如果是上面这种装法的话就要用Invoke()去调用实现。
//法二:用f2来装这个,然后还有要注意的就是自己定义的委托和要装入的委托要是一致的,就是说要是匹配的。
fun f2 = speak;
//一个委托里面可以容纳多个函数,而且执行的时候的话也是按照添加的顺序执行,+就是向委托里面加函数,-就是移除函数。
f2 += speak;
f2 -= speak;
//执行委托。
f2();
}
static void speak()
{
Console.WriteLine(1);
}
}
}
1.在上面的代码块中我们定义了两个委托分别是,fun和fun2,注意这只是仅仅定义,如果要用的话要声明一个这样的变量。
2.在代码中都写了的注释,大家可以看看。
系统定义的委托
1.Action:系统声明的无返回值的,但是可以有最多16个参数的委托。
2.Func:系统声明的有返回值的,返回值的类型可以根据自己的需求写,所包装的函数可以带的参数可以有16个。
Func<int,int> a = Dodo;//第一个参数为函数的参数类型,第二个为返回值类型。
}
static void speak()
{
Console.WriteLine(1);
}
static int Dodo(int a)
{
Console.WriteLine("hello world");
return 1;
}
小结:用我们制定的委托来容纳函数的时候记得是要匹配的,包括参数和返回值,还有调用委托的时候和调用函数一致,不过是不用带参数的,还有一点就是一般我们用系统给我们定义好的委托就好了,没必要去定义了。