目录
知识点01:什么是委托
委托是函数的“容器”,可以将其理解为表示函数的变量类型,本质上是一个类,用来定义函数的类型,用于存储和传递函数,不同的函数必须对应各自“格式”一致的委托
知识点02:如何声明一个委托
基本语法:访问修饰符 delegate 返回值类型 委托名 (参数列表)
例如使用C#自带的无返回值委托Action
public delegate void Action(int a);
知识点03:定义自定义的委托
1.声明一个用于存储无参无返回的函数的容器
delegate void MyFun();
2.声明有参有返回值的委托
(需注意即使存在重载的规则,委托依旧不能重名)
delegate int MyFun1(int a);
知识点04:如何使用定义好的委托
使用委托就是将“格式“一致的函数,加到该委托这个”容器“之中去,然后在其他逻辑中,执行该委托(就是执行里头的函数)。
1.如何将函数添加到对应的委托”容器“中?
①:在委托实例化的同时,为其添加函数
MyFun f=new MyFun(Fun);
void Fun()
{
//Fun函数内部逻辑
}
②:委托实例化完成后,通过+=将函数放到委托”容器“中
f+=Fun1;
void Fun1()
{
//Fun1函数逻辑
}
2.将函数放到委托后,该如何调用
①:使用委托中的invok函数
f.invoke();
②:直接将其当作一个函数来使用
f();
需注意,在调用委托时,会将其内部所有的函数全部按添加顺序执行一遍
知识点05:多播委托
一个委托变量可以存储多个函数,存储了多个函数的委托叫多播委托,将委托实例化后,通过+=和-=来为其添加的删除函数。
知识点06:委托的应用
1.委托常用作类的成员
即将委托实例化后,为其添加函数后调用
private Myfun myfun;
myfun+=Fun;
myfun+=Fun1;
myfun.Invoke();
void Fun()
{
}
void Fun1()
{
}
2.委托作其他函数的参数(回调函数)
delegate void DelegateDone(); //定义一个无返回值的委托
void DoWork(DelegateDone callBack){ callBack(); }//再定义一个实现函数,将委托作为参数传递进来:
class Program
{
delegate void DelegateDone();
static void Main(string[] args)
{
Program test = new Program();
test.DoWork(testCallBack);
}
void DoWork(DelegateDone callBack)
{
Console.WriteLine("执行某一函数");
callBack();
}
static void testCallBack()
{
Console.WriteLine("输出回调成功");
}
知识点07:系统定义好的委托
使用前需引入名称空间 System;
1.Action(无参无返回)
2.Func<返回值>(有返回值无参)
3.泛型委托Action<参数列表>(有参无返回值)
4.Func<0-16个参数,0-1个返回值>
总结:
委托是装载函数的容器,本质上是一个类
可以用委托变量装载函数的传递函数
系统提供了自带的委托,足够日常开发中使用