1委托和房产中介的作用是一样的。
2委托和c语言的函数指针差不多。但c语言的函数指针给了函数地址后,只能调用一次。不能像数组那样绑定多个函数地址。C#的委托却可以。
3你可以理解委托是C语言 函数指针的 升级版
4 委托是变量,它的数据类型是方法。 int num=33; 那num是int类型。委托是方法类型;
理解房产中介的交易,你就能学会怎么使用委托了。
1中介就是委托 delegate 这个对象就是在他们2个人都认识的地方,那肯定就在公共区域,类外声明委托;
namespace Gossip
{
public delegate void WT();//全局变量: 委托
2我们的目的是什么?子窗体想去调用主窗体内的方法。这就相当于我要买房,我是不是要去中介找个业务员啊。public delegate void WT(); 这个中介有了,那业务员呢?在子窗体定义一个属性。主窗体new出子窗体,是可以访问这个属性的。
namespace Gossip
{
public partial class Form11串口 : Form
{
#region //全局变量
public WT wt;//委托用于 子调用父
3这个小wt就是业务员。它一直有买房子的需求,那卖家是谁呢?这时在主窗体里,新建子窗体
private void button1_Click(object sender, EventArgs e)//主窗,串口
{
Form11串口 f1= new Form11串口();//串口新 窗体
f1.wt += () => { this.Show(); };//委托
f1.Show();//子窗显示
this.Hide();//主界面隐藏
}
主窗体就相当于卖家,它把自己的一套房子卖给业务员wt;这主窗体里的某个方法就是一套房子。
用+=去绑定。
4这时我们回到子窗体。我子窗体运行完要关闭了,想显示主窗体。
private void Form10编码_FormClosed(object sender, FormClosedEventArgs e)
{
wt();//委托 显示主窗
}
子窗体调用了这个业务员,那业务员绑定的是什么功能呢?我们去主窗体看下:
f1.wt += () => { this.Show(); };//委托
这个this.Show();的功能是显示主窗体;
5补充
委托的类型和绑定方法的签名必须一致:返回类型,参数类型和个数;
namespace Gossip
{
public delegate void WT();//全局变量: 委托
WT这个委托是无返回值,无参数的。所以绑定的方法也只能无返回值,无参数
我们总结一下流程。
1在公共区申明委托
2子窗体新建一个委托属性 ,注意public
3主窗体把自己的一个方法绑定给子窗委托属性
4子窗内调用委托。(这样,子窗体就调用主窗体的方法了)