delegate 和 event有少许区别,下面来讲述。
delegate 的例子:
delegate void MyDelegate();
class Observer
{
public MyDelegate myDelegate;
}
class Receiver1
{
public void Run()
{
Console.Out.WriteLine("receiver 1 run");
}
}
class Receiver2
{
public static void Run()
{
Console.Out.WriteLine("receiver 2 run");
}
}
class Program
{
static void Main(string[] args)
{
Observer observer = new Observer();
observer.myDelegate += new MyDelegate(new Receiver1().Run);
observer.myDelegate += new MyDelegate(Receiver2.Run);
observer.myDelegate();
}
}
主要步骤如上述绿色部分,红色+=是为了实现委托的组合,如果此委托对应一个方法,可以直接用=。
event是通过delegate实现的,event 只是在delegate基础上作了两点限制:
1:客户只能使用委托所提供的+=和-=行为,不能直接用=,即不影响委托对其他observer的notify.
2:只有声明类可以调用(或激发)一个事件,外部类不可以直接调用其事件。
代码如下,红色为和delegate的区别:
delegate void MyDelegate();
class Observer
{
public event MyDelegate myDelegate;
public void Notify()
{
myDelegate();
}
}
class Receiver1
{
public void Run()
{
Console.Out.WriteLine("receiver 1 run");
}
}
class Receiver2
{
public static void Run()
{
Console.Out.WriteLine("receiver 2 run");
}
}
class Program
{
static void Main(string[] args)
{
Observer observer = new Observer();
observer.myDelegate += new MyDelegate(new Receiver1().Run);
observer.myDelegate += new MyDelegate(Receiver2.Run);
//observer.myDelegate();
observer.Notify();
}
}