委托(一)

Question:在KYC留言板中,在关闭留言窗口会,会重新刷新留言记录的sotre。这就用到了“子用户控件”状态发生的变化后,对父页面的进行某种操作。
    委托,事件与代理
    有event(事件),就有对事件发生的处理function(函数),而委托就是把两者紧密联系在一起的桥梁,当事件发生时,委托就会知道,这时委托就会把信息发给事件的处理函数,这样就把
二者联系在一起了,下面介绍整个过程的实现。
     Delegate(委托),在程序中可以用来注册事件,对程序中的某种状态进行监视,如果发生后,会触发相应的事件操作。委托是用来把方法当作参数来传递的,委托的签名(参数)必须和所委托的方法一致。  

步骤:
一:在子用户控件中定义一个Delegte,也就是定义委托的数据类型,
    例:public delegate void ChangeBtTextHadler(object sender,AjaxEventArgs e);//定义委托
    说明:这是定义一个返回类型为void,有两个参数的委托<注意:参数是由自己定义的>,这里只是定义了它的参数及数据类型,并没有对它进行任何的实例化;委托的定义和类相同,所以常常放在类的外面定义,不过,也可以放在类里定义,这就是“嵌套委托”,它的调用方式不相同。
二:在页面的类里面定义一个委托类型的事件。
    例:public event ChangeBtTextHadler onHideWindow;//定义了ChangeBtTextHadler类型的委托事件。
    说明:这里的onHideWindow就充当了事件代理的角色,而这里是窗体hind()事件,才是真正的被监听的事件。《也理解为委托才是代
三:产生事件,这里是窗体的hind()事件产生时,触发了onHindWindow的委托事件。
      protected void window1_hide(object sender, AjaxEventArgs e)
    {//产生事件,事件的监听
        Coolite.Ext.Web.ParameterCollection myParam = new Coolite.Ext.Web.ParameterCollection();
        myParam.Add(new Coolite.Ext.Web.Parameter("Type", "1"));
        onHideWindow(this, new AjaxEventArgs(myParam));//参数与委托类型的参数一致
    }
四:委托实例化后绑定到事件<委托就是把函数作参数传递>
      protected void page_Init(object sender, EventArgs e)
    {
        Delegate_Control1.onHideWindow += new ChangeBtTextHadler(Change_Test);//委托实例化后绑定到事件,Change_Test函数就是事件的处理函数,注册事件的处理函数;从观察者
        模式来看,这里是注册订阅者。<注意:事件的注册在父页面的初始化时进行,也就是这里的page_Init()函数>
    }
五:写明处理函数:处理函数,在被监听的事件发生后,要进行的处理操作。
        protected void Change_Test(object sender, AjaxEventArgs e)
    {
        if (btDelegate.Text == "委托的测试")
        {
            btDelegate.Text = "测试成功";
        }
        else
            btDelegate.Text = "委托的测试";
    }
   
关于delegate(委托)的详细说明
    1:在委托的声明过程中,如上面所说,ChangeBtTextHadler表示委托的数据类型,它的返回为void,带有两个参数。
    2:委托的实例化:还有一种委托的常用形式:就是不用代理只把函数作为参数来进行传递,对它进行实例化,就是与它自身签名对应的方法,也就是作为参数传递的方法。也就是上面的Change_Test()。
    3:multicast委托,一个委托变量可以引用一系列的委托,在这一系列的委托中,每个委托都顺序地指向后续的委托,这样就形成了一个委托链,也就叫做:multicast委托。也就是说一个事件
    的发生其实可以多个处理函数来进行处理,而每个处理函数就是委托链的一项。

                                                                                                                           2009-12-17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值