标签:
定义委托
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