了解知识:
委托可理解成 升级版的指针
一切都是从地址开始:
变量:以某个地址为起点的一段内存中所存储的值
函数:以某个地址为起点的一段内存中所存储的一组指令
直接调用:通过函数名来调用函数,通过函数名直接获得函数所在地址并开始执行
间接调用:通过(函数指针)来调用函数,通过读取(函数指针)里的值获得函数所在的地址并开始
执行
一、系统自带委托
1.定义一个类,创建函数
//定义一个类,创建函数
class AddPoint
{
public int Add(int a,int b){
return a+b;
}
public void ActMethod(){
Console.WriteLine("这是一个Action方法");
}
}
2.使用系统自带的委托(Func委托、Action委托)
//先实例化AddPoint类
AddPoint ap = new AddPint();
//委托也是一种类,也需要实例化,但是对标是函数方法
Action action = new Action(ap.ActMethod);
//调用Action委托的函数
action.Invoke();
//也可以写成
action();
//Func委托实例化,对标函数方法
Func<int,int,int> func = new Func<int,int,int>(ap.Add);
//调用Func委托的函数,因为Func是有返回值的(最后一个),所以用一个变量取返回值
int num = func(12,13);
//输出
Console.WriteLine(num);
//控制台停留
Console.ReadLine();
实例代码,可以直接跑
using System;
namespace weituo
{
class Program
{
static void Main(string[] args)
{
AddPoint ap = new AddPoint();
Action action = new Action(ap.ActMethod);
action();
action.Invoke();
Func<int, int, int> func = new Func<int, int, int> (ap.Add);
int b = func(2, 3);
Console.WriteLine(b);
Console.WriteLine(func(20,30));
Console.ReadLine();
}
class AddPoint {
public int Add(int a, int b)
{
int z = a + b;
return z;
}
public void ActMethod() {
Console.WriteLine("Action方法");
}
}
}
}
结果:
二、自定义委托
1.声明自定义委托
//委托声明 返回值数据类型 自定义委托名 (需要委托的函数输入)
//比大小
public delegate double BigEquip (float a ,float b);
//是否相等
public delegate bool CompareEquip (int a ,double b);
2.类中定义两个方法
//AddPoint类中定义两个方法
public double BE(float a,float b)
{
double an;
if (a > b)
{
an = a; }
else
{
an = b; }
return an;
}
public bool CE(int a,double b)
{
return a==b;
}
3.在实现类中调用
//在实现类中进行调用
static void Main(