标签:
定义委托
public delegate void NumberChangeEventHandler(int count);
定义事件发布者
public class Publisher { private int count; public NumberChangeEventHandler NumberChanged; // public event NumberChangeEventHandler NumberChanged; public void DoSomething() { if (NumberChanged != null) { count++; NumberChanged(count); } } }
定义事件订阅者
public class Subscriber { public void OnNumberChanged(int count) { Console.WriteLine("Subscriber notified:count={0}", count); } }
class Program { static void Main(string[] args) { Publisher pub = new Publisher(); Subscriber sub = new Subscriber(); //pub.NumberChanged += new NumberChangeEventHandler(sub.OnNumberChanged); pub.NumberChanged += sub.OnNumberChanged; pub.DoSomething(); pub.NumberChanged(100); } }
上面代码定义了一个NumberChangedEventHandler委托,然后创建了事件的发布者Publisher和订阅者Subscriber。当使用委托变量时,客户端可以直接通过委托变量触发事件--->pub.NumberChanged(100),这将会影响所有注册了该委托的订阅者。
解决:将声明委托变量代码注释,取消注释下一行 的事件,这时候,直接调用pub.NumberChanged(100)是被禁止的。实现了对委托变量的封装
标签:
原文地址:http://www.cnblogs.com/Sunlimi/p/4181699.html