日期:2014-05-19  浏览次数:20785 次

关于委托和事件中的一个问题
先声明一个委托:
public   delegate   void   MessageHandler(string   messageText)
在Connect类中声明下面这个:
public   event   MessageHandler   MessageArrived
委托调用的方法是:
public   class   Display
{
                  public   void   DisplayMessage(string   message)
                  {Console.WriteLine( "Message   arrived:   {0} ",   message);}
}
在主类中先注明了这个
Connection   myConnection   =   new   Connection();//初始化
                  Display   myDisplay   =   new   Display();
  myConnection.MessageArrived   +=
                  new   MessageHandler   (myDisplay.DisplayMessage);
在主类中事件中调用
                  if   (   MessageArrived   !=   null   )
                  {   MessageArrived( "Hello   Mum! ");   }
这里MessageArrived   !=   null   怎么理解?
从运行情况下,MessageArrived   !=   null   为true!这个怎么理解?
初始化Connection这个类的时候MessageArrived   是null,
调用   myConnection.MessageArrived   +=
                  new   MessageHandler   (myDisplay.DisplayMessage);后,
MessageArrived   这个时候还是null吗?
myConnection.MessageArrived   +=
                  new   MessageHandler   (myDisplay.DisplayMessage)是按什么步骤算的?
上面整个过程只指出现过MessageArrived( "Hello   Mum! ");  
那么new   MessageHandler   (myDisplay.DisplayMessage)调用public   delegate   void   MessageHandler(string   messageText)中的messageText是什么?



------解决方案--------------------
调用 myConnection.MessageArrived +=
new MessageHandler (myDisplay.DisplayMessage);后,
MessageArrived 这个时候还是null吗?
======================
MessageArrived有值了,这个 "值 "就是:myDisplay.DisplayMessage,所以不是null;


myConnection.MessageArrived +=
new MessageHandler (myDisplay.DisplayMessage)是按什么步骤算的?
============================
"+= "注册事件运算符,可以简单地理解给委托变量MessageArrived赋值为myDisplay.DisplayMessage


上面整个过程只指出现过MessageArrived( "Hello Mum! ");
那么new MessageHandler (myDisplay.DisplayMessage)调用public delegate void MessageHandler(string messageText)中的messageText是什么?
=======================
就是 "Hello Mum! "; 因为MessageArrived已经被赋值为myDisplay.DisplayMessage,所以MessageArrived( "Hello Mum! ")相当于调用了myDisplay.DisplayMessage( "Hello Mum! "),所以形参messageText的值为 "Hello Mum! "