一个简陋的类通信服务类

      遇到个问题,一个类A执行某个动作后,需要通知类B。开始想用一个delegate,但这个delegate只能用于他们两个了,所以就专门写了个类C,可以向他注册delegate,然后其他类可以通过C来执行delegate指向的函数。
      代码如下:

 

 1class Program
 2    {
 3
 4        static void Main(string[] args)
 5        {
 6            Receiver r = new Receiver();
 7            r.Run();
 8
 9            QQ q = new QQ();
10            q.Run();
11
12            Sender s = new Sender();
13            s.Run();
14
15           
16
17            Console.Read();
18        }

19    }

20
21    class Notifer
22    {
23
24        private Notifer()
25        {
26        }

27
28        static Notifer instance = new Notifer();
29
30        public static Notifer Instance
31        {
32            get return instance; }
33        }

34
35
36        private Dictionary<string, Delegate> listeners = new Dictionary<string, Delegate>();
37
38        public void Send(string name)
39        {
40            if (listeners.ContainsKey(name))
41                listeners[name].DynamicInvoke(null);
42        }

43
44        public void add(string name, Delegate handler)
45        {
46            if (!listeners.ContainsKey(name))
47            {
48                listeners.Add(name, handler);
49            }

50        }

51    }

52    public delegate void fuckDelegate();
53
54    class Receiver
55    {      
56        private  fuckDelegate fucnkdeleInstance;        
57
58        public void Run()
59        {
60            fucnkdeleInstance = new fuckDelegate(call);
61            Notifer.Instance.add("fuck", fucnkdeleInstance);
62        }

63
64        private void call()
65        {
66            Console.WriteLine("oh,fuck!");
67        }

68        
69    }

70
71    class Sender
72    {
73        public void Run()
74        {
75            Notifer.Instance.Send("fuck");
76            Notifer.Instance.Send("fuckQQ");
77        }

78    }

79
80    class QQ
81    {
82        private fuckDelegate fucnkdeleInstance;
83
84        public void Run()
85        {
86            fucnkdeleInstance = new fuckDelegate(call);
87            Notifer.Instance.add("fuckQQ", fucnkdeleInstance);
88        }

89
90        private void call()
91        {
92            Console.WriteLine("QQ said:\"oh,Im fucked!\"");
93        }

94    }

转载于:https://www.cnblogs.com/sundavi/archive/2008/06/14/1221967.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值