C#中的delegate和event比较释义

来源:sam1111 的 Blog  作者:csdn
C#中的delegate和event比较释义
摘要:在基于Windows平台的程序设计中,事件(event)是一个很重要的概念。因为在几乎所有的Windows应用程序中,都会涉及大量的异步调用,比如响应点击按钮、处理Windows系统消息等,这些异步调用都需要通过事件的方式来完成。即使在下一代开发平台&mdas…

下面是一个简单的例子:

using System;
public class EventTest
{
  // 步骤1,定义delegate对象
  public delegate void MyEventHandler(object sender, System.EventArgs e);

// 步骤2省略
  public class MyEventCls
  {
      // 步骤3,定义事件处理方法,它与delegate对象具有相同的参数和返回值类// 型
      public void MyEventFunc(object sender, System.EventArgs e)
      {
          Console.WriteLine("My event is ok!");
      }
  }

// 步骤4,用event关键字定义事件对象

private event MyEventHandler myevent;
  private MyEventCls myecls;
  public EventTest()
  {
      myecls = new MyEventCls();

// 步骤5,用+=操作符将事件添加到队列中
      this.myevent += new MyEventHandler(myecls.MyEventFunc);
  }

// 步骤6,以调用delegate的方式写事件触发函数
  protected void OnMyEvent(System.EventArgs e)
  {
      if(myevent != null)
          myevent(this, e);
  }

public void RaiseEvent()
  {
      EventArgs e = new EventArgs();
      // 步骤7,触发事件
      OnMyEvent(e);
  }
  public static void Main()
  {
      EventTest et = new EventTest();
      Console.Write("Please input 'a':");
      string s = Console.ReadLine();
      if(s == "a")
      {
         et.RaiseEvent();
      }
      else
      {
          Console.WriteLine("Error");
      }
  }
}

输出结果如下,黑体为用户的输入:

Please input ‘a’: a
My event is ok!

小结

通过上面的讨论,我们大体上明白了delegate和event的概念,以及如何在C#中使用它们。我个人认为,delegate在C#中是一个相当重要的概念,合理运用的话,可以使一些相当复杂的问题变得很简单。有时我甚至觉得,delegate甚至能够有指针的效果,除了不能直接访问物理地址。而且事件也是完全基于delegate来实现的。由于能力有限,本文只是对delegate和event的应用作了一个浅显的讨论,并不深入,我希望本文能够起到抛砖引玉的作用。真正想要对这两个概念有更深入的了解的话,还是推荐大家看MSDN。

【相关文章】好搜一下
关于Visual Studio 2010中生成测试数据的简便方法

关于Visual Studio 2010中生

【IT专家网独家】在VisualStudio2010中主要是通过使用Databa…