public static void Main(string[] args)
{
Class1 c1 = new Class1();
Class2 c2 = new Class2();
c2.PlayGame += new PlayGameHandler(c1.func); //指定委托,这种写法怎么理解?
c2.todo(); //事件开始
}public class Class2
{
 public event PlayGameHandler PlayGame;
  ...
 public void todo()
 {
  System.EventArgs e = new EventArgs();
  OnPlayGame(e);
 }protected virtual void OnPlayGame(EventArgs e)
 {
  if(PlayGame != null)
   {
    PlayGame(this,e);
   }
  }}public class Class1
{
 public void func(object sender,EventArgs e)
 ...
}// 定义委托处理程序
public delegate void PlayGameHandler(object sender,System.EventArgs e);上面是一个简单的委托的实现,几个问题:
1、c2.PlayGame += new PlayGameHandler(c1.func); //指定委托,这种写法怎么理解?
2、大家一般什么情况下会想到用委托技术?我觉得用自定义消息完全可以可以替代该功能
3、说C#的委托和C++中的函数指针很类似,我怎么没有发现类似的地方,也请高手帮助理解一下

解决方案 »

  1.   

    1 PlayGame是一个事件。事件调用的方法是你自己定义的,所有通过委托来实现。2 目前最常用委托技术的应该是多线程异步处理。还有就是对目标方法不明确的时候3 委托是一种安全类型的指针,它在CLR的控制之下,不会出现内存错误。它指向的也是一个内存地址。这点和C++一样
      

  2.   

    委托是.net里新增加的数据类型,就像int , string 一样。可以做为参数传递给方法.
    委托的最主要用途是:事件 和 异步1.c1.func做为参数传递给PlayGameHandler构造方法
    2.事件编程和异步编程用到
    3.委托代表了一个方法实体,所以和C++的函数指针类似。