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

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

好了,故事开始了~

一.小考拉从前的生活

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace KoalaOldLife
{
class Koala
{
public void Water() { Console.WriteLine("Find Water"); }
public void Rice() { Console.WriteLine("Find Rice"); }
public void Meat() { Console.WriteLine("Find Meat"); } public void Need()
{
Water();
Rice();
Meat();
}
} class Program
{
static void Main(string[] args)
{
Koala koala = new Koala();
koala.Need();
Console.ReadKey();
}
}
}

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

二.小考拉现在的生活

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace KoalaLife
{
class Water
{
public void showWater() { Console.WriteLine("Here's the Water!"); }
} class Rice
{
public void showRice() { Console.WriteLine("Here's the rice"); }
} class Meat
{
public void showMeat() { Console.WriteLine("Here's the meat"); }
} delegate void Dad(); //定义委托
delegate void Mom(); class Koala
{
public event Dad thirsty; //定义事件
public event Mom hungry; public void Need()
{
thirsty(); //调用事件
hungry();
}
} class Program
{
static void Main(string[] args)
{
Koala koala = new Koala();
koala.thirsty += (new Water()).showWater; //绑定事件对应的方法
koala.hungry += (new Rice()).showRice;
koala.hungry += (new Meat()).showMeat; koala.Need();
Console.ReadKey();
}
}
}

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

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

三.总结

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

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

C#委托与事件的简单使用的更多相关文章

  1. C# 委托和事件,简单示例说明问题

    先看看示例效果 按照国际惯例,得先说说概念. 委托(C# 编程指南) 事件(C# 编程指南) 以上内容来自MSDN. 委托源码 [委托] 概念和代码都有了.剩下的就是应用了,要是只知道概念不会用,那还 ...

  2. C#委托和事件的简单实例

    委托 C#里这个委托我的理解是可以看成是一个方法模板的类型.(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法 ...

  3. C# 委托和事件(一):最简单的委托和事件

    C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...

  4. C#委托与事件--简单笔记

    委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...

  5. [转载]C#委托与事件--简单笔记

    原文地址:https://www.cnblogs.com/joeymary/p/8486358.html 委托 简单记录点东西 适合似懂非懂的朋友看看委托类型用来定义和响应应用程序中的回调.借此可以设 ...

  6. 简单理解和使用 C# 委托与事件

    委托和事件 委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程 ...

  7. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  8. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  9. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

随机推荐

  1. Lambda 表达式[MSDN]

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.Lambda 表达式对于编写 LINQ 查 ...

  2. php阳历转农历的类 谷歌到的

    <?phpclass Lunar {    var $MIN_YEAR = 1891;    var $MAX_YEAR = 2100;    var $lunarInfo = array(   ...

  3. A Complete List of .NET Open Source Developer Projects

    http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...

  4. 【Django】--ModelForm组件

    ModelForm a.class Meta: model,#对应Model的 fields=None,#字段 exclude=None,#排除字段 labels=None,#提示信息 help_te ...

  5. CMS系统存储路径

    CMS系统特点:前后端分离 index.html 首页文件index.php 管理后台的页面 api文件夹: 提供的接口 caches文件夹: 缓存文件 html文件夹:  生成的静态页面 phpcm ...

  6. SpringMVC后台接收list类型的数据的实现方式

    一.背景 最近在做一些东西的时候,遇到一个需要Springmvc后台接收list类型数据的需求,几经辗转才完美解决了这个问题,今天记下来方便以后使用,也分享给需要的小伙伴们~ 二.实现方式 1.实现方 ...

  7. Spring学习(二)

    1. AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些? AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式 应用场景有: 记录日志 监控 ...

  8. php抽奖代码

    1.经典概率算法抽奖 $tmpItems = ['电脑'=>10, '相机'=>50, '100元现金'=>500]; $proSum = array_sum($tmpItems); ...

  9. linux环境中使用转义字符使命令行字符颜色高亮

    而通过转义序列设置终端显示属性的格式为: \033[Param {;Param;...}m 其中转义序列以 \033[ 为开头,m 为设置属性结束,中间部分的 Param 为属性值,{} 表示可以设置 ...

  10. CozyRSS开发记录-中断

    接下来会对CozyRSS做一堆的修改,包括界面和功能.因为比较杂乱,而且大多是体力活,所以就不记录了.等下次再发的时候,见到的就是一个有可用性的CozyRSS了!