重新学习C# 之 委托(Delegate)

一、定义

C#中的委托(Delegate)是存有对某个方法的调用的引用类型的变量。引用可在运行时被改变。委托(Delegate)特别被用于实现事件和回调方法。所有的委托(Delegate)都派生之System.Delegate类。

二、解释举例

在开发WinForm程序时经常会有添加员工信息的这样一种功能,我们一般都会创建一个界面用于展示所有的员工信息,这个界面会有一个“新增”的功能,一般都是打开一个模式窗口用于添加员工信息,只有在关闭子窗体时,我们会返回一个Ture或False,告诉信息展示窗体是否添加了新员工,若是则刷新员工列表,没有则信息保持不变。

这时候的代码是这样的(如下):

 private void AddNewUserInfo_Click(object sender, EventArgs e)
 {

           //通过构造方法进行初始化(此时,通过特殊渠道进入子窗体内部)
            FrmAddNewInfo uAdd = new FrmAddNewInfo ();
            if(uAdd.LoadFrmAddNewInfo())  

            {

                        ReFreshUserList();//必须等到子窗体关闭才能调用

           }
         
 }

private void ReFreshUserList()

{

        //刷新用户信息列表

}

这个功能里面有一个问题,如果用户一次性录入10个员工的信息,在录入第N个的时候,由于接了个电话,等在重新录入的时候忘记了自己刚才录入到第几个了,这个时候只有关闭“新增”窗体,才能看到已经录入的信息,那怎么在录入的同时就让信息展示列表刷新,而不必等到关闭再刷新列表。

而委托(Delegate)就可以解决这个问题,代码示例如下:

//首先定义一个委托(定义的委托必须和要绑定的方法具有相同类型、数量的参数)

public delegate void MyDel();

private void AddNewUserInfo_Click(object sender, EventArgs e)

 {

           //将方法ReFreshUserList绑定给定义好的委托

           MyDel  mdel=ReFreshUserList;

           //通过构造方法进行初始化(此时,将委托送入入子窗体内部)

           //也可以理解为派出一个间谍进入敌人内部
           FrmAddNewInfo uAdd = new FrmAddNewInfo (mdel);
           uAdd.ShowDialog();
         
 }

private void ReFreshUserList()

{

        //刷新用户信息列表

}

---------子窗体中的代码------------

//在子窗体中定义一个委托,用于接收传过来的委托

//给派过来的间谍,在敌人内部安排一个合法身份

private MyDel mdl;

public FrmAddNewInfo (MyDel mdel):this()//子窗体初始化
 {
            this.mdl = mdel;//派出的间谍获取合法活动身份
            strCgXx = str;
}

private void AddUserInfo()

{

        //添加信息成功后

       //实现委托(间谍将获取的数据传回)

       //将在此处实现父窗体的ReFreshUserList()l

        mdl();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值