委托
-
委托是什么
委托是函数的容器,可以理解为表示函数(方法)的变量类型
它用来存储传递函数(方法)
委托的本质是一个类,用来定义函数(方法)的类型(返回值和参数的类型)
不同的函数(方法)必须对应和各自"格式"一致的委托 -
基本语法
关键字:delegate
语法:访问修饰符 delegate 返回值 委托名(参数列表)
写在哪里
可以声明在namespace和class语句块中
更多情况下写在namespace中
简单记忆:就是函数申明语法前面加delegate关键字
- 定义自定义委托
访问修饰符默认不写为public,这样在别的命名空间也能使用
Private 其他命名空间就不能使用了,所以一般用private
申明一个可以用来存储无参无返回值的容器
delegate void myFunc();//委托规则的申明 在同一语句块中不能重名
public delegate int MyFunc2(int a);
//表示用来装载或传递返回值为int,有一个int参数的函数委托容器规则
这里只是定义一个规则,并没有使用
- 使用自定义委托
委托变量是函数的容器
在3中代码所演示的申明两个委托,所谓申明委托,其实就是申明两个变量类型 ,这个类型是专门用于存储函数的
MyFunc f=new MyFunc(Func);
MyFunc f2=Func;
static void Func(){
Console.WriteLine("你在做什么呀");
}
两种写法本质上是一样的
因为是变量,所以可以实例化一个出来。MyFun中是需要传入一个参数的,这个参数就是它所存储函数的函数名。当然,这个函数要和申明中定义的一致(即有相同的返回值类型和相同的参数类型、个数)
此时,这个变量f就装载了函数Fun()
此时只是把函数装进去,但是没有任何调用的。
那么如何去执行这个函数呢?
方法一:f.Invoke()
方法二: f();相当于用调用函数的形式去调用它
委托用在哪儿?
- 作为类的成员变量
- 作为函数的参数
在函数中的作用:
可以在函数中先处理一些逻辑,当这些逻辑处理完了,再执行传入的函数。
- 委托变量可以存储多个函数(多播委托)
//用委托存储多个函数
MyFunc ff=null; //ff=ff+func;
ff+=Func;
ff+=Func3;
ff();
当调用ff时,就会调用Func和Func3这两个函数
- 系统定义好的委托
常用的委托系统已经给我们提供了
命名空间:System
Action——一个无参无返回值到的委托
Func<>——泛型是返回值,一个可以有任意类型返回值的委托
Action<>——可以传n个参数的委托(最多可以传16个参数)(没有返回值)
Func<>也用于可以有多个参数,一个返回值的委托,泛型中前几个是参数,最后一个是返回值。