C#委托与事件机制
事件机制是一个这样的场景:有A、B、C、D四个类,当A有事件FireEvent发生时,B、C、D必须作出相应该反应(即执行相应的方法)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharp_Delegate_Event
{
/**
*
* 类A为供应商,B、C、D为用户
*/
class A
{
//委托对象,为所有注册用户发送消息。
public delegate void Listers(String msg);
Listers lis;
public void FireEvent()
{
Console.WriteLine("FireEvent");
//执行委托,所有注册的方法都会依次执行
lis("fireEvent");
}
//所有要收到FireEvent事件的用户,都要注册
public void register(Listers l)
{
lis += l;
}
//取消注册
public void unRegister(Listers l)
{
lis -= l;
}
}
class B
{
//当FireEvent事件发生时,B执行doSomething_b方法
public void doSomething_b(String msg)
{
Console.WriteLine("B do some action");
}
}
class C
{
//当FireEvent事件发生时,C执行doSomething_c方法
public void doSomething_c(String msg)
{
Console.WriteLine("C do some action");
}
}
class D
{
//当FireEvent事件发生时,D执行doSomething_d方法
public void doSomething_d(String msg)
{
Console.WriteLine("D do some action");
}
}
class Program
{
static void Main(string[] args)
{
//首先,把new A、B、C、D的实例
A a = new A();
B b = new B();
C c = new C();
D d = new D();
//用户B、C、D要注册
a.register(b.doSomething_b);
a.register(c.doSomething_c);
a.register(d.doSomething_d);
//当FireEvent事件发生时,就会“自动地”执行B、C、D类上注册时用的方法
a.FireEvent();
Console.WriteLine();
//D用户取消了注册,则当FireEvent发生时,D用户则执行相应的方法
a.unRegister(d.doSomething_d);
Console.WriteLine("--------D用户取消了注册后-----------");
a.FireEvent();
Console.ReadKey();
}
}
}
示例代码下载,不需要下载分的。