什么是委托
- 委托(delegate)是函数指针的“升级版”
- 一切皆地址
- 变量(数据)是以某个地址为起点的一段内存中所存储的值
- 函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令
- 直接调用与间接调用
- 直接调用:通过函数名来调用函数,CPU通过函数名直接获取函数所在地址并开始执行—>返回
- 间接调用:通过函数指针来调用函数,CPU通过读取函数指针存储的值获得函数所在地址并开始执行—>返回
使用委托注意要点:类型兼容
1、返回值的数据类型一致
2、参数个数和参数的数据类型一致
委托示例
- 系统自带的简单委托
- Action委托(无返回值)
- Func委托(有返回值)
- 学习链接
自定义委托
using System;
namespace 自定义委托
{
//声明委托
delegate double Caldele(double a, double b);
//返回值类型 参数列表
class Program
{
static void Main(string[] args)
{
//实例化一个类
Calcultor cc = new Calcultor();
//实例化一个委托,并且填入方法
Caldele cade1 = new Caldele(cc.Add);
Caldele cade2 = new Caldele(cc.Sub);
Caldele cade3 = new Caldele(cc.Mul);
Caldele cade4 = new Caldele(cc.Div);
double a = 100, b = 200, c = 0;
//通过委托间接调用
c = cade1(a, b);
System.Console.WriteLine(c);
c = cade2(a, b);
System.Console.WriteLine(c);
c = cade3(a, b);
System.Console.WriteLine(c);
c = cade4(a, b);
System.Console.WriteLine(c);
System.Console.WriteLine("Hello World!");
System.Console.ReadKey();
}
}
class Calcultor {
//自定义类及方法
public double Add(double a, double b) {
return a + b;
}
public double Sub(double a, double b)
{
return a - b;
}
public double Mul(double a, double b)
{
return a * b;
}
public double Div(double a, double b)
{
return a / b;
}
}
}
委托的一般使用
实例:把方法当作参数传给另一个方法
正确使用1:模板方法,“借用”指定的外部方法来产生结果
正确使用2:回调(callback)方法,调用指定的外部方法