关于委托和事件中的一个问题
先声明一个委托:
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! "