.NET Framework中的委托和事件

委托是什么?

它就是一“托儿”,你一旦上了它的贼船,那么后续的很多好戏就该轮番上演了!

为啥?因为这个“托儿”有一肚子的坏水在等着你呢(它代理的那些方法)!

另外,从好的方面讲,委托就是一尚方宝剑,可以当皇帝老子使!牛着呐!

下面举个例子来说明下:

首先定义一个委托:

public delegate void SomethingHappendEventHandler(ReorderEventArgs e);

看见没,它和普通方法有嘛区别?对了,就是多了一个delegate关键字!

另外,委托是啥类型?别跟我说你不知道!引用类型呗!相对应的就是值类型啦!

下一个要注意的就是参数了,ReorderEventArgs是何方神圣?看看!

public class ReorderEventArgs : EventArgs{
        private int _quantity;

        public ReorderEventArgs(int quantity)
        {
            _quantity = quantity;
        }

        public int QuantityOnHand
        {
            get { return _quantity; }
        }

}

原来不过如此,只不过从EventArgs继承而来,EventArgs是啥?是默认的事件参数,由框架提供的,对于它

其实大家早就已经司空见惯了,是否感觉眼熟?对了,就是在这里看到过:

private void Form2_Load(object sender, EventArgs e) {}

 

现在我们定义好了一个委托,那么怎么让它发挥作用呢?

接下来,我们使用刚刚的委托来声明一个事件:

public event SomethingHappendEventHandler SomethingHappened;
这里换了一个关键词,原来delegate的位置换成了event!还有一点变化,是什么?

SomethingHappened是不是没有参数?对的,它的参数其实在SomethingHappendEventHandler

中进行定义了,SomethingHappened其实就是一个委托类型,下面来定义一个响应该事件的方法:

private void x_SomethingHappened(ReorderEventArgs e)
 {
            Console.WriteLine("QuantityOnHand's value is {0}", e.QuantityOnHand);
 }

现在有了一个方法,那么怎么让它响应SomethingHappened事件呢?自然,需要注册一下:

在一个合适的位置,比如构造函数,FormLoad事件、PageLoad事件等地方:

this.SomethingHappened += x_SomethingHappened;

在c#使用+=运算符即可为事件注册一个监听方法,很方便。

那么,万事俱备似乎只欠东风了,这东风是啥?当然是激活事件了:

public void RaiseEvents(){
            ReorderEventArgs args=new ReorderEventArgs(100);
            SomethingHappened(args);

}

好了,如你所愿,事件激活了,监听的方法也发现新大陆似的立马积极的给予了响应!

最后,咱总结下,委托是who?这事件又是who?委托和事件到底是what关系?学这个啥用?

你如果在一个按钮上双击一下,vs会自动给你创建一个事件处理程序,如下:

 private void button1_Click(object sender, EventArgs e){
            timer1.Enabled = true;
 }

那么,有没有想过为什么在这里写代码系统就会响应Click事件呢?秘密就在vs悄悄的帮你生成的代码文件中,

一个叫做xx.designer.cs文件中,多了这样一句话:

this.button1.Click += new System.EventHandler(this.button1_Click);

看清楚了吧,其实button1_Click这个方法被vs悄悄的注册给系统预定义事件Click了,这个事件是谁的?button1的!

一切又回到了原点,是否对基于事件编程的原理有拨云见日的感觉?哈哈,快去改造你自己的程序去吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值