C#delegate和event的关系 - chunlieater/chunlifeet GitHub Wiki
delegate可以看作是一种特殊的类,任何可以声明类的地方都可以声明委托,而event是一种特殊的delegate。
- public delegate void GreetingDelegate(string name)
- public class Chunli{
- public GreetingDelegate del;
- public event GreetingDelegate evn;
- public void ChunliCall(string call){
-
del(call);
-
evn(call);
- }
- }
- class Program{
- private void Feet(string name){}
- private void Ass(string name){}
- private void Pussy(string name){}
- static void Main{
-
Chunli chunli = new Chunli();
-
chunli.del = Feet;
-
chunli.del += Ass;
-
chunli.del += Pussy;
-
chunli.evn = Feet;//编译错误!
-
chunli.evn += Ass;
-
chunli.evn += Pussy;
-
chunli.ChunliCall("delicious!");
- }
- } 观察者模式: Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。
被观察者(Subject)就是结果的提供者,观察者(Observer)就是根据结果作出反应的类和函数。
-
//定义被观察者
-
public class Meat{
-
string name;
-
int temperature;
-
public Meat(string name){
-
this.name = name;
-
}
-
}
-
public class Pot{
-
Meat meat;
-
public delegate void BoilHandler(int temperature);
-
public delegate void MeatHandler(string name);
-
public event BoilHandler boil;
-
public event MeatCallHandler meatCall;
-
public Pot(Meat meat){
-
this.meat = meat;
-
}
-
public void BoilMeat(){
-
for(i=0;i<=100;i++){
-
meat .temperature = i;
-
boil(meat .temperature);
-
if(i>=95){
-
meatCall(meat .name);
-
}
-
}
-
}
-
}
-
//定义观察者
-
public class Alarm{
-
public void alarm(int temperature){
-
Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:", param);
-
}
-
}
-
public class Display{
-
public static void display(string name){
-
Console.WriteLine("Display:"+name+"快煮熟了!");
-
}
-
}
-
//执行
-
class Program{
-
Pot pot = new Pot(new Meat("Chunli"));
-
Alarm ala = new Alarm();
-
pot. BoilHandler += ala.alarm;
-
pot. MeatHandler += Display.display;
-
pot.BoilMeat();
-
}