zoukankan      html  css  js  c++  java
  • 我也谈委托与事件

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

    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) 。

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

    作者:GY小小鸟
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Java多态(更新中...)
    C语言free释放内存后为什么指针里的值不变?竟然还可以输出?
    LeetCode:344-反转字符串
    20150518 字符设备驱动
    20150517 Linux文件系统与设备文件系统
    20150514我读《深入理解linux内核》之虚拟文件系统笔记
    双系统Ubuntu下修复启动项的两种方法
    20150503 imx257下实现I2C驱动的四种方法
    20150502 调试分析之 使用gdb远程调试ARM开发板
    20150501 调试分析之 修改内核来定位系统僵死问题
  • 原文地址:https://www.cnblogs.com/YangFengHui/p/2018929.html
Copyright © 2011-2022 走看看