C#:代表(delegate)和事件(event)

转载 2007年09月22日 00:27:00

代表和事件是使用C#语言两个非常重要的概念,如果你不会使用代表和事件,那就说明你不会用C#进行软件开发。

代表(delegate):

 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:

  1. 声明一个delegate对象。
  2. 实现和delegate具有相同参数和返回值的函数实现(可以是静态和非静态的)。
  3. 产生一个delegate对象的时候,把你刚刚实现的函数作为参数传给他的构造函数。

请看下面例子:

using System;
using System.Collections.Generic;
using System.Text;

namespace UsingDelegate
{
    public delegate void MyDelegate(string mydelegate);//声明一个delegate对象

    public class TestClass
    {

        //实现有相同参数和返回值的函数
        public void HelloDelegate(string mydelegate)
        {
            Console.WriteLine(mydelegate);
        }

       //实现有相同参数和返回值的静态函数

        public static void HelloStaticDelegate(string mystaticdelegate)
        {
            Console.WriteLine(mystaticdelegate);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TestClass testClass = new TestClass();
            MyDelegate mydelegate = new MyDelegate(testClass.HelloDelegate);//产生delegate对象
            mydelegate("Hello delegate");//调用

            MyDelegate myStaticDelegate = new MyDelegate(TestClass.HelloStaticDelegate);//产生delegate对象
            myStaticDelegate("Hello static delegate");//调用
        }
    }
}

 

事件(event):

让我通过一个例子来模拟事件的整个过程:

  1. 创建一个button类,它里面有一个click 事件。
  2. 创建一个Form类,他里面有一个我们上面定义的button类。
  3. 要求:当我们用户单击button类的时候From类要对他进行处理,输出一条信息“我知道你被单击了”

请看下图:

首先我们会单击button,然后button会通知Form,然后From就作出相应。这个过程在C#里面应该怎么做到呢?

下面我会列出上述例子的源代码(这里就不介绍怎么声明event等等内容了):

using System;
using System.Collections.Generic;
using System.Text;

namespace UsingEvent
{
    public delegate void ClickEventHandler(object sender, EventArgs e);//声明一个代表:请看文章最后面Note

    public class MyButton              //创建MyBottom
    {
        public event ClickEventHandler ClickEvent;//声明一个事件

        public void Click()                                 //单击MyButton
        {
            if (ClickEvent != null)
            {
                Console.WriteLine("MyButton: 我被单击了");
                ClickEvent(this, null);                          //抛出事件,给所有相应者
            }
        }
    }

    public class MyForm
    {
        public MyButton myButton = new MyButton();

        public MyForm()
        {

            //添加事件到myButton中,当myButton被单击的时候就会调用相应的处理函数

            myButton.ClickEvent += new ClickEventHandler(OnClickEvent);   

         }

       //事件处理函数

       void OnClickEvent(object sender, EventArgs e)
        {
            Console.WriteLine("MyForm: 我知道你被单击了!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyForm form = new MyForm();//生成一个MyForm

            form.myButton.Click();//单击MyForm中的鼠标,效果就出来了
        }
    }
}
 

Note:public delegate void ClickEventHandler(object sender, EventArgs e);这是事件委托标准的声明方法,其实在参数里面我们可以不传,也可以是其他类型的。但是最好还是使用上面的声明方法,你可以继承EventArgs,来包装你要传送的其他任何参数。

 

C#中的委托(Delegate)和事件(Event)

分类:   把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式——观察者(Observer)有一个参考。     委托和事件应该是C#相较于...
  • haihsl123456789
  • haihsl123456789
  • 2015年03月13日 22:45
  • 1065

C# 委托delegate与事件Event的用法和相关知识

什么是事件?事件有哪些?怎么用事件? 一、什么是事件? 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动、输入值改变等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时...
  • smooth_tailor
  • smooth_tailor
  • 2016年09月08日 11:17
  • 2059

C#中的delegate与event简单讲解

一、开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那。好了,那今天就趁月黑风高的夜晚简单来谈谈delegat...
  • liulong1567
  • liulong1567
  • 2015年08月30日 13:56
  • 625

C#代表(delegate)和事件(event)

代表(delegate): 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤: 声明一个delegate对象。 实现和deleg...
  • eclipse20011103
  • eclipse20011103
  • 2011年12月21日 14:30
  • 333

C#:代表(delegate)和事件(event) 【转】

代表(delegate): 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:声明一个delegate对象。 实现和delegate具有相同参...
  • qiao000_000
  • qiao000_000
  • 2010年04月05日 22:19
  • 566

C#:代表(delegate)和事件(event) (转)

C#:代表(delegate)和事件(event) (转) 代表(delegate):  它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤...
  • jhycjhyc
  • jhycjhyc
  • 2015年06月01日 16:16
  • 965

C#:代表(delegate)和事件(event)

代表(delegate):  它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤: 声明一个delegate对象。实现和delega...
  • a351945755
  • a351945755
  • 2014年07月04日 11:43
  • 485

C#:代表(delegate)和事件(event) (转)

 代表(delegate): 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤:声明一个delegate对象。 实现和delegate具有相同...
  • techler2
  • techler2
  • 2009年11月17日 22:23
  • 118

C#:代表(delegate)和事件(event)

代表(delegate): 它是C#语言里面的函数指针,代表可以指向某一个函数,在运行的时候调用这个函数的实现。下面来看看它的实现步骤: 声明一个delegate对象。 实现和deleg...
  • wenzhoufeng
  • wenzhoufeng
  • 2007年03月30日 14:16
  • 562

C#event 与 delegate的区别

C# in a nutshell 这本书讲的很清楚 我也是看了几遍才看到重点: event对象 在拥有该对象的类内部可以把它当成和delegate一样的东西 只有在类外部使用这个event的时候才...
  • cwj649956781
  • cwj649956781
  • 2015年01月10日 17:26
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: C#:代表(delegate)和事件(event)
举报原因:
原因补充:

(最多只允许输入30个字)