一、什么是委托
委托是 函数(方法)的容器,可以理解为表示函数(方法)的变量类型,用来存储、传递函数(方法)
委托的本质是一个类,用来定义函数(方法)的类型(返回值和参数的类型)
不同的 函数(方法)必须对应和各自"格式"一致的委托
二、系统定义好的委托
①Action:无参无返回的委托
②Func:无参有一个返回值的委托
③Action<>:有参无返回的委托
④Func<>:有参有返回
三、如何使用
//使用系统自带委托 需要引用using System;
//无参无返回值
Action action = Fun;
action += Fun3;
action();
//可以指定返回值类型的 泛型委托
Func<string> funcString = Fun4;
Func<int> funcInt = Fun5;
//可以传n个参数的 系统提供了 1到16个参数的委托 直接用就行了
Action<int, string> action2 = Fun6;
//可以穿n个参数的 并且有返回值的 系统也提供了 16个委托
Func<int, int> func2 = Fun2;
四、事件与委托的区别
基本没有区别,只是事件不能在外部直接赋值和调用
Test类中定义了action和event
DoEvent是Test类自定义的函数,调用了其中的事件
Test t = new Test();
//委托可以在外部赋值
t.myFun = null;
t.myFun = TestFun;
t.myFun = t.myFun + TestFun;
t.myFun += TestFun;
//事件是不能再外部赋值的
//t.myEvent = null;
//t.myEvent = TestFun;
//虽然不能直接赋值 但是可以 加减 去添加移除记录的函数
t.myEvent += TestFun;
t.myEvent -= TestFun;
//委托是可以在外部调用的
t.myFun();
t.myFun.Invoke();
//事件不能再外部调用
//t.myEvent();
//只能在类的内部去封装 调用
t.DoEvent();