首页 > 代码库 > 委托与事件

委托与事件

定义委托

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)是被禁止的。实现了对委托变量的封装

委托与事件