namespace DemoTest
{
//声明委托类型
public delegate void MyFuncDelegate(object ob);
//声明委托类型
public delegate void MyFuncDelegate2(object ob);
//调用测试
public class DelegateEventTest
{
//测试1
public static void Main1()
{
//创建发布者
Release release = new Release();
//创建订阅者
RegeditA RA = new RegeditA();
//创建订阅者
RegeditB RB = new RegeditB();
//订阅者注册到发布者
release. MyFuncDelegateEvent += RA.Fun;
//订阅者注册到发布者
release. MyFuncDelegateEvent += RB.Fun;
//发布者通知,所有注册者的注册方法都被执行了
release.MyFuncDelegateEvent("object");
}
//测试2
public static void Main2()
{
//创建发布者
Release release = new Release();
//创建订阅者(构造函数内部被注册到发布者了,所以后面不用再注册了)
RegeditC RC = new RegeditC();
//创建订阅者(构造函数内部被注册到发布者了,所以后面不用再注册了)
RegeditC RC2 = new RegeditC();
// //发布者通知,所有注册者的注册方法都被执行了
Release.MyFuncDelegate2Event("object");
}
}
//发布者
public class Release
{
//发布事件
public MyFuncDelegate MyFuncDelegateEvent;
//发布事件
public static MyFuncDelegate2 MyFuncDelegate2Event;
}
//订阅者A
public class RegeditA
{
//订阅者收到发布者的通知后要执行的方法(被注册的方法)
public void Fun(object ob)
{
MessageBox.Show("A");
}
}
//订阅者B
public class RegeditB
{
//订阅者收到发布者的通知后要执行的方法(被注册的方法)
public void Fun(object ob)
{
MessageBox.Show("B");
}
}
//订阅者C(注意:构造函数中有注册的方法,所以每创建一次实例对应的实例默认都为发布者注册了一次)
public class RegeditC
{
//注册事件(订阅发布者发布的事件)
public RegeditC()
{
Release.MyFuncDelegate2Event += this.Fun;
}
//订阅者收到发布者的通知后要执行的方法(被注册的方法)
public void Fun(object ob)
{
MessageBox.Show("C"+this.GetHashCode().ToString());
}
}
}