委托就好比劳务公司,就是帮别人干活的。
他的关键字delegate ,写上这个东西就好比你建立了一所劳务公司,然而你建立的这个公司在哪可以看到呢?这时就需要在delegate之前加访问修饰符的类型。那这个公司的职责(返回值类型)是啥呢?那么就需要在delegate之后加上返回值类型。一个公司肯定需要一个名字(DelegateName)对吧而且这个公司生产产品肯定需要原料(参数)对吧。
//例如
public delegate int DelegateName(int a,int b)
委托的核心是什么?——委托就相当于函数指针(万物皆地址);把函数当成变量;
下面我就举一个加法的例子来演示一下用委托和不用委托的区别
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Calculate c1 = new Calculate();
public Form1()
{
InitializeComponent();
c1.Add(2, 3);//这是不用委托
}
}
public class Calculate
{
public int Add(int a,int b)
{
int c = a + b;
return c;
}
}
}
using System.Windows.Forms;
public delegate int myDelegate(int a, int b);//这是用委托,只要是参数类型和数量的对应且返回值类型相同的都可以通过这个公司委托办事儿。
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Calculate c1 = new Calculate();
public Form1()
{
InitializeComponent();
myDelegate p1 = c1.Add;//这里就相当于公司派出了一个叫p1的人,来接受c1.Add委托办的事儿
p1(2, 3);
}
}
public class Calculate
{
public int Add(int a,int b)
{
int c = a + b;
return c;
}
}
}
总而言之就是,你这件事儿不想做了,只要咱俩的参数个数和类型相同,返回值类型相同,那么你就可以把这件事儿委托给我们劳务公司,我们派人来代替你做这件事。
那么如何理解把函数当成变量呢?请看下面的例子
using System.Windows.Forms;
public delegate int myDelegate();
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Calculate c1 = new Calculate();
public Form1()
{
InitializeComponent();
myDelegate p1 = c1.CreatVal;
c1.Sub(p1);
}
}
public class Calculate
{
public int CreatVal()
{
int num = 1;
return num;
}
public int Sub(myDelegate f1)
{
int a = 8 - f1();
return a;
}
}
}