@lz: 若要说明使用事件的好处那只有用代码来说明问题的本质了.using System; public class EventTest { static void Main() { MessagePublish mp = new MessagePublish(); mp.publisher += new MessagePublishHandler(DisplayMessage); MessageClass mc = new MessageClass(); mp.publisher += new MessagePublishHandler(mc.InstanceMethod);
mp.InvokeEvent(); } static void DisplayMessage() { Console.WriteLine("Static Method"); } }public delegate void MessagePublishHandler();public class MessagePublish { public event MessagePublishHandler publisher; public void InvokeEvent() { if(publisher!=null) publisher(); } }public class MessageClass { public void InstanceMethod() { Console.WriteLine("Instance Method."); } }通过以上代码我们可以看出,事件体只是给出了方法的模型.对于事件的侦听对象只要求满足其方法的模型即可; 这也就提供了很大的发挥空间,并且被注入事件的方法实质上被添加到事件的队列当中,所以一个事件同时可以引发多个方法的调用. 以上是我对于事件的一些看法,如有不对指出,请大家给于指正.
声明一个事件类似于声明一个进行了封装的委托类型的变量。 public event MathDelegate mathEvent
若要说明使用事件的好处那只有用代码来说明问题的本质了.using System;
public class EventTest
{
static void Main()
{
MessagePublish mp = new MessagePublish();
mp.publisher += new MessagePublishHandler(DisplayMessage);
MessageClass mc = new MessageClass();
mp.publisher += new MessagePublishHandler(mc.InstanceMethod);
mp.InvokeEvent();
} static void DisplayMessage()
{
Console.WriteLine("Static Method");
}
}public delegate void MessagePublishHandler();public class MessagePublish
{
public event MessagePublishHandler publisher;
public void InvokeEvent()
{
if(publisher!=null)
publisher();
}
}public class MessageClass
{
public void InstanceMethod()
{
Console.WriteLine("Instance Method.");
}
}通过以上代码我们可以看出,事件体只是给出了方法的模型.对于事件的侦听对象只要求满足其方法的模型即可;
这也就提供了很大的发挥空间,并且被注入事件的方法实质上被添加到事件的队列当中,所以一个事件同时可以引发多个方法的调用.
以上是我对于事件的一些看法,如有不对指出,请大家给于指正.
public event MathDelegate mathEvent