public class Subject //主题
{
public delegate void testDelegate();
//声明事件
public event testDelegate testEvent;
public void DoEvent()
{
testEvent();
}
}
public class Observer//观察者
{
public class EventHandle()
{
System.Console.Write(“Hello!”);
}
}
public class LinkSubjectAndObserver //连接观察者和主题
{
private Subject subject=new Subject();
//注册事件
Observer observer=new Observer();
subject+= new EventHandle(observer.EventHandle);
//触发事件
subject.DoEvent();
}
从这个例子中,我们看到事件的使用实际上分为三个步骤:(1)声明事件;(2)注册事件; (3)触发事件。这里对事件的语法不进行描述,我们主要关注它的具体应用。
(1)委托和事件
很多初学者对为什么要使用委托不甚了解,他们往往认为直接调用函数就行了。其实,委托和c语言中的“函数指针”有很多的相似之处,它也是指向函数的具体地址的类型,调用函数的时候,根据委托来寻找具体的函数,委托实际上就是函数的调用者和具体函数的一个桥梁,使用委托使程序员可以将方法引用封装在对象内。然后可以将该对象传递给可调用委托所引用方法的代码,而不必在编译时知道将调用哪个方法。
C# 中的“事件”是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。事件最常见的用途是用于图形用户界面;通常,表示界面中的控件的类具有一些事件,当用户对控件进行某些操作(如单击某个按钮)时,将通知这些事件。但是事件未必只用于图形界面。事件为对象提供一种通常很有用的方法来发出信号表示状态更改,这些状态更改可能对该对象的客户很有用。事件是创建类的重要构造块,这些类可在大量的不同程序中重复使用。
(2) 观察者模式的C#实现
上面的实例就是一个简单的观察者模式的实现。使用观察者的好处就是观察者和被观察者(主题)之间的解耦。当被观察者(实例中的Subject)发生变化时,所有依赖它的对象(Observer)也都得到通知并更新 。由于观察者的数量并未受到限制,所以可以支持多个广播。
浙公网安备 33010602011771号