委托和事件

1、委托可加载实例方法
2、委托可加减(+=:对方法的绑定,-=:取消对方法的绑定)
public delegate void myDelegate(string message);
    class Program
    {
        static void Main(string[] args)
        {
            Program pg = new Program();
            myDelegate my = pg.myDelegate1;
            my += pg.myDelegate1;   //方法的绑定
            my -= pg.myDelegate1; //取消方法的绑定
            my("bbbbbbbbbbb");
        }
        public void myDelegate1(string message)
        {
            Console.WriteLine(message);
        }
    }
3、委托可用一个变量代替
 使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
4、使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(此变量代表一个方法),可以依次调用所有绑定的方法。

 


二、事件
Event封装修了委托类型的变量,使得,在类的内部,不管你声明它是public还是protected,它部是private的。在类的外部,注册“+=”和注销“-=”的访问一符与你在声明事件 的使用的访问符相同。
声明一个事件:类似于声明一个进行了封装的委托类型的变量。
定义委托:public delegate void GreetingDelegate(string name );


namespace Delegate
{
class Heater
 {
private int temperature; // 水温
 // 烧水
public void BoilWater()
{
for (int i = 0; i <= 100; i++)
{
 temperature = i;
 if (temperature > 95)
{ MakeAlert(temperature);
ShowMsg(temperature);
}
}
 }

// 发出语音警报
private void MakeAlert(int param)
 {
Console.WriteLine("Alarm:嘀嘀嘀,水已经 {0} 度了:" , param);
}
// 显示水温
private void ShowMsg(int param)
{ Console.WriteLine("Display:水快开了,当前温度:{0}度。" , param);
}
}
 class Program
 {
 static void Main()
 {
Heater ht = new Heater();
 ht.BoilWater();
 }
 }
}

Observer设计模式:为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。
1、委托声明原形中的Object类型的参数代表了Subject,也就是监视对象,回调函数(比如Alarm的MakeAlert)可以通过它访问触发事件的对象(Heater)。
2、EventArgs对象包含了Observet所感兴趣的数据。

posted @ 2009-10-15 23:33  flora_asp.net  阅读(164)  评论(0编辑  收藏  举报