好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# 事件Event

C# 事件Event

关于“事件”的定义,请去问Google吧,本文不引用官方的术语。

废话不多说,先定义一下场景:

微波炉,大家生活中都有用过,当你关上微波炉的门时便自动加热。“关门”和“加热”便是两个动作。注意,当关上门的时候便开始加热,这里“当关上门”便是一个“事件”的触发条件。触发了什么?“加热”这个动作。

我相信你完全能理解我上面所说的内容吧?那么接下来我便一步一步来实现我的题目“C#事件Event”

第一步:定义我们的对象

对象一:微波炉

 ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {

    } 

对象二:加热器(微波炉内置)

 ///   <summary> 
     ///   加热器
      ///   </summary> 
     class   Heater
    {

    } 

第二步:添加动作(或称行为)

我们提过的,“关门” 和 “加热” 两个动作

 ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {        
          ///   <summary> 
         ///   关门
          ///   </summary> 
         public   void   CloseDoor()
        {
            Console.WriteLine(  "  Now the door is closed!  "  );
        }
    }

      ///   <summary> 
     ///   加热器
      ///   </summary> 
     class   Heater
    {
          ///   <summary> 
         ///   加热
          ///   </summary> 
         public   void   Heating()
        {
            Console.WriteLine(  "  The food is heating!  "  );
            Console.ReadLine();
        }
    } 

第三步:定义我们的“事件”(出场)

     ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {        
public delegate void DoorCloseHandler(); public event DoorCloseHandler DoorCloseEvent; /// <summary> /// 关门 /// </summary> public void CloseDoor() { Console.WriteLine( " Now the door is closed! " ); } }

这里我们给“门”定义“关闭”事件,也就是下面那两句:

 public   delegate   void   DoorCloseHandler();        
  public   event  DoorCloseHandler DoorCloseEvent;

“事件”有了,什么时候执行呢?当然是“关上门”后执行了。

 ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {        
          public   delegate   void   DoorCloseHandler();        
          public   event   DoorCloseHandler DoorCloseEvent;

          ///   <summary> 
         ///   关门
          ///   </summary> 
         public   void   CloseDoor()
        {
            Console.WriteLine(  "  Now the door is closed!  "  );
            OnDoorClosed();
        }

          public   void   OnDoorClosed()
        {
              if  (DoorCloseEvent !=  null  )
                DoorCloseEvent();
        }
    } 

看到了吗?在我们之前定义的 CloseDoor 方法后面调用我们的“事件”。

到这里为止,我们知道了事件的“发起者”(关门动作),事件的“要做什么”(加热),事件“什么时候执行”(关上门),还缺点什么呢?

串起来喽,也就是俗称的“绑定”它。

 ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {        
          public   delegate   void   DoorCloseHandler();        
          public   event   DoorCloseHandler DoorCloseEvent;

          ///   <summary> 
         ///   关门
          ///   </summary> 
         public   void   CloseDoor()
        {
            Console.WriteLine(  "  Now the door is closed!  "  );
            OnDoorClosed();
        }

          public   void   OnDoorClosed()
        {
              if  (DoorCloseEvent !=  null  )
                DoorCloseEvent();
        }

          public   Microwave()
        {
            Heater heater  =  new   Heater();
              this .DoorCloseEvent +=  heater.Heating;
        }
    } 

我选择了在厂家生产微波炉的时候就把他们绑起来(我是想说构造函数来着),不是这样,我不会买这微波炉的,你呢?

大功告成,让我们“关门”试试吧!

     class   Program
    {
          static   void  Main( string  [] args)
        {
            Microwave wave  =  new   Microwave();
            wave.CloseDoor();
        }
    } 

最后附上完整代码:

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Text;

  namespace   Event
{
      class   Program
    {
          static   void  Main( string  [] args)
        {
            Microwave wave  =  new   Microwave();
            wave.CloseDoor();
        }
    }

      ///   <summary> 
     ///   微波炉
      ///   </summary> 
     class   Microwave
    {        
          public   delegate   void   DoorCloseHandler();        
          public   event   DoorCloseHandler DoorCloseEvent;

          ///   <summary> 
         ///   关门
          ///   </summary> 
         public   void   CloseDoor()
        {
            Console.WriteLine(  "  Now the door is closed!  "  );
            OnDoorClosed();
        }

          public   void   OnDoorClosed()
        {
              if  (DoorCloseEvent !=  null  )
                DoorCloseEvent();
        }

          public   Microwave()
        {
            Heater heater  =  new   Heater();
              this .DoorCloseEvent +=  heater.Heating;
        }
    }

      ///   <summary> 
     ///   加热器
      ///   </summary> 
     class   Heater
    {
          ///   <summary> 
         ///   加热
          ///   </summary> 
         public   void   Heating()
        {
            Console.WriteLine(  "  The food is heating!  "  );
            Console.ReadLine();
        }
    }
} 

希望能对你对事件的理解和使用有所帮助,谢谢!

开博之作,转载麻烦注明原创作者,谢谢。期待下一篇吧:)

 

 

标签:  C# ,  Event

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于C# 事件Event的详细内容...

  阅读:35次