Event

 

何为事件呢?简单的举个例子,我们学校有个校花,很多的狼都注视着,可是当她进入男生无法监视的地方,我们就需要间谍打入她的内部。所以谁要是想知道校花在干什么,只要把我们的手机号码给这个间谍,只要校花有什么举动时,她就会发信息给我们,当然你要是想知道校花在干什么,你必须给间谍你的号码以及一些好处。
学过设计模式的人应该很清楚这是一个观察者模式。我们先使用标准的观察者模式来还原这个举动,然后再使用DELEGATE来实现,并由此来揭示令初学者郁闷的事件。

public   interface   色狼
{
      
void 通知(string 通知的内容);
}

 

public   class  色狼甲:色狼
{
     
public const string PHONE="138******";
     
public void 通知(string 通知的内容)
     
{
          
if(通知的内容=="去食堂吃饭")
             去食堂();
     }

}

public   class  色狼乙:色狼
{
{
     
public const string PHONE="139******";
     
public void 通知(string 通知的内容)
     
{
          
if(通知的内容=="跟别人约会")
             郁闷一天();
     }

}

}

 

public   class  间谍
{
     
private List<色狼>  色狼列表=new List<色狼>;
     
public void Add(色狼 又是一只狼)
     
{
         色狼列表.Add(又是一只狼);
     }


     
public void Remove(色狼 疲惫的色狼)
     
{
     色狼列表.Remove(疲惫的色狼);
     }

     
public void 看见校花去食堂()
     
{
         通知色狼(
"去食堂吃饭");
     }

     
public void 看见校花出去约会()
     
{
         通知色狼(
"出去约会");
     }


     
private void 通知色狼(string 内容)
     

        foreach(色狼 item 
in 色狼列表)
        
{
            色狼.通知(内容);
        }

     }

    
}
 

 

static   void  Main( string [] args)
{
    色狼甲 A
=new 色狼甲();
    色狼乙 B
=new 色狼乙();
    间谍 王婆
=new 间谍();
    王婆.Add(A);
    王婆.Add(B);
    王婆.看见校花去食堂();
    王婆.看见校花出去约会();
}


在上一讲中,我讲解了Delegate和interface的转换来实现相同的功能,这一次我们将反过来将用interface实现的观察者模式改成Delegate版的。事实上interface就是规定所有的色狼都必须实现通知这个方法,而用Delegate这种强类型同样可以实现这个约束。

public   delegate   void  通知( string  通知内容);

public   class  间谍
{
     
private List<通知>  色狼列表=new List<通知>;
     
public void Add(通知 又是一只狼)
     
{
         色狼列表.Add(又是一只狼);
     }


     
public void Remove(通知 疲惫的色狼)
     
{
     色狼列表.Remove(疲惫的色狼);
     }

     
public void 看见校花去食堂()
     
{
         通知色狼(
"去食堂吃饭");
     }

     
public void 看见校花出去约会()
     
{
         通知色狼(
"出去约会");
     }


     
private void 通知色狼(string 内容)
     

        foreach(色狼 item 
in 色狼列表)
        
{
            色狼.通知(内容);
        }

     }

}
 
static   void  Main( string [] args)
{
    色狼甲 A
=new 色狼甲();
    色狼乙 B
=new 色狼乙();
    间谍 王婆
=new 间谍();
    王婆.Add(
new delegate(A.通知));
    王婆.Add(
new delegate(B.通知));
    王婆.看见校花去食堂();
    王婆.看见校花出去约会();
}

很高兴的是,.net中的Evnet就相当于List,而+=就相当于List.Add(),-=就相当于List.Remove();
所以.net中Evnet事实上是一个委托列表,.net的事件就是一个用委托列表来实现的观察者模式。

转载于:https://www.cnblogs.com/Linjianyu/archive/2008/02/26/1082838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值