zoukankan      html  css  js  c++  java
  • C#委托与事件的简单使用

    前言:上一篇博文从原理和定义的角度介绍了C#的委托和事件。本文通过一个简单的小故事,来说明C#委托与事件的使用方法及其方便之处。

    在阅读本文之前,需要你对委托和事件的基本概念有所了解。如果你是初次接触C#的委托与事件,请先阅读:C#委托与事件初探

    好了,故事开始了~

    一.小考拉从前的生活

      从前有一只小考拉,她的生活中只有三样东西:水,米饭和肉。她渴了就去拿水喝,饿了就去拿米饭和肉吃。而且,米饭和肉一定要一起吃(换作你也不会单吃一种吧^_^),于是代码是这样的

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace KoalaOldLife
     8 {
     9     class Koala
    10     {
    11         public void Water() { Console.WriteLine("Find Water"); }
    12         public void Rice() { Console.WriteLine("Find Rice"); }
    13         public void Meat() { Console.WriteLine("Find Meat"); }
    14 
    15         public void Need()
    16         {
    17             Water();
    18             Rice();
    19             Meat();
    20         }
    21     }
    22 
    23     class Program
    24     {
    25         static void Main(string[] args)
    26         {
    27             Koala koala = new Koala();
    28             koala.Need();
    29             Console.ReadKey();
    30         }
    31     }
    32 }

      我们的关注点在Need函数(下同),因为Need函数表明了小考拉有需求的时候要怎样做。小考拉先拿了水喝,然后拿了米饭和肉吃。

    二.小考拉现在的生活

      终于有一天,小考拉觉得整天自己找东西吃太累了,于是她回到家,委托爸爸妈妈帮忙。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace KoalaLife
     8 {
     9     class Water
    10     {
    11         public void showWater() { Console.WriteLine("Here's the Water!"); }
    12     }
    13 
    14     class Rice
    15     {
    16         public void showRice() { Console.WriteLine("Here's the rice"); }
    17     }
    18 
    19     class Meat
    20     {
    21         public void showMeat() { Console.WriteLine("Here's the meat"); }
    22     }
    23 
    24     delegate void Dad(); //定义委托
    25     delegate void Mom();
    26 
    27     class Koala
    28     {
    29         public event Dad thirsty; //定义事件
    30         public event Mom hungry;
    31 
    32         public void Need()
    33         {
    34             thirsty(); //调用事件
    35             hungry();
    36         }
    37     }
    38 
    39     class Program
    40     {
    41         static void Main(string[] args)
    42         {
    43             Koala koala = new Koala();
    44             koala.thirsty += (new Water()).showWater; //绑定事件对应的方法
    45             koala.hungry += (new Rice()).showRice;
    46             koala.hungry += (new Meat()).showMeat;
    47 
    48             koala.Need();
    49             Console.ReadKey();
    50         }
    51     }
    52 }

      从Need函数可以看出,小考拉说渴的时候爸爸会过来,说饿的时候妈妈会过来。但是最开始他们并不知道要拿什么东西给小考拉。所以在Main函数中,小考拉要提前告诉爸爸:我说渴的时候给我拿水;提前告诉妈妈:我说饿的时候给我拿米饭和肉。

      这样一来,小考拉就不用自己找东西了,只需要提前告诉爸爸妈妈一次渴和饿的时候需要什么,然后直接喊“我渴了”,“我饿了”,爸爸妈妈就会来送东西给小考拉吃。小考拉就能有更多时间懒懒的睡觉啦zZ~

    三.总结

      以上故事中,最开始只有对象(小考拉)和方法(水、米饭、肉)两层。后来在对象和方法这两层之间,加入了委托(爸爸妈妈),变为了三层,从而简化思路。很明显,这是因为,委托和事件帮助我们隐去了底层的一些细节,将细节封装起来,从而简化编程。

      我想,这又是面向对象思想的一个体现吧。

  • 相关阅读:
    Liunx基础优化配置
    Linux配置国内的Yum源
    Liunx配置静态IP
    百度前端学院|任务七
    java的远程访问接口的实例
    java套接字实现接口访问
    Mysql的链接超时异常CommunicationsException
    mysql查看和设置timeout 和批量杀死链接进程
    springmvc接受表单多条数据的值
    jquery获取点击标签内的子标签内容和值实例
  • 原文地址:https://www.cnblogs.com/KoalaDream/p/5226391.html
Copyright © 2011-2022 走看看