我也谈委托与事件

  虽然在博客园里面已经有很多关于C#委托和事件的文章,但是为了自己在学习的过程中,加深对委托的理解,我还是决定写一下自己的心得体会。以备他日在回来复习。委托(delegate)是一个类,但是这个类在声明的时候跟普通的类有些不同。不带class 关键字等。如下:

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
static void Main( string [] args)
{
Test();
Console.ReadKey();
}
static void SayHello( string name)
{
Console.WriteLine(
" Nice to me you " + name);
}
static void SayHelloToo( string name)
{
Console.WriteLine(
" Nice to me you too! " + name);
}
public delegate void DoSomething( string name); // 声明一个委托类
static event DoSomething MyEvent; // 声明一个DoSomething类型的事件。

public static void Test()
{
DoSomething ds1
= new DoSomething(SayHello); //声明一个DoSomething委托类型的对象
DoSomething ds2
= new DoSomething(SayHelloToo);
ds1(
" 杨凤辉 " ); //委托对象,相当于对应函数的指针
MyEvent
+= ds1; // 将两个委托对象绑定到事件对象上。
MyEvent += ds2; // -=为取消绑定。
MyEvent("YFH");  //此行为触发事件,事件触发后会通知绑定的方法,并执行。
}

新建一个委托对象,就相当于该对象是参数(方法)的指针应用,一般事件,都是针对于某一具体的委托的事件。一个事件可以绑定多个方法,事件触发后,绑定的方法会依次被执行。 在其他牛人的博客内,有一个很好的举例。在Windows程序设计中,在设计器中双击一个按钮button1.会自动生成该button的单击响应函数:

   private void button1_Click(object sender, EventArgs e)
        {

        }

    你会发现几乎所有方法都是两个参数的:object sender, EventArgs e。微软为这些方法定义了一个委托private System.EventHandler(object sender,EventArgs e)。我们查看:Designer.cs里面button1对象的属性。有一个click的事件属性,绑定了button1_Click方法。

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

有一点我不明白的是:事件与委托对象有关系吗,在声明事件的时候,也是关于某个委托的事件,而委托对象,也是关于该委托的对象。难道那么都是该委托类的对象?

转载于:https://www.cnblogs.com/YangFengHui/archive/2011/04/17/2018929.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值