C#委托与事件的简单使用
前言:上一篇博文从原理和定义的角度介绍了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#委托与事件的简单使用的更多相关文章
- C# 委托和事件,简单示例说明问题
先看看示例效果 按照国际惯例,得先说说概念. 委托(C# 编程指南) 事件(C# 编程指南) 以上内容来自MSDN. 委托源码 [委托] 概念和代码都有了.剩下的就是应用了,要是只知道概念不会用,那还 ...
- C#委托和事件的简单实例
委托 C#里这个委托我的理解是可以看成是一个方法模板的类型.(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法 ...
- C# 委托和事件(一):最简单的委托和事件
C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...
- C#委托与事件--简单笔记
委托 简单记录点东西 适合似懂非懂的朋友看看 委托类型用来定义和响应应用程序中的回调. 借此可以设计各种有面向对象特性的代码模式.下面要说的事件在我看来就是委托的一种实现,再深一步讲,利用委托加事件, ...
- [转载]C#委托与事件--简单笔记
原文地址:https://www.cnblogs.com/joeymary/p/8486358.html 委托 简单记录点东西 适合似懂非懂的朋友看看委托类型用来定义和响应应用程序中的回调.借此可以设 ...
- 简单理解和使用 C# 委托与事件
委托和事件 委托:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程 ...
- 9、委托、事件、Lambda
开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.) 第 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- js调用php和php调用js的方法举例
js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...
- 解除sql server数据库占用
use master go ) set @dbName='dbname' --数据库名 ) declare cur_lock cursor for SELECT DISTINCT request_se ...
- Devils never rest
一个人 练习一个人 书名 看到就被吸引了,然后亚马逊下手 作者很文艺,我很喜欢作者内心的那份宁静. 我一个人吃饭 旅行 到处走走停停 也一个人看书 写信 自己对话谈心 依然是心内一片寂静,总是不由自主 ...
- 修改一个CGRect的值
// 1. 用一个临时变量保存返回值. CGRect temp = self.view.frame; // 2. 给这个变量赋值. temp.size.width = kWIDTH; // 3. 修改 ...
- vim 使用技巧记录
vim 使用技巧记录 1.批量注释与取消注释 命令格式:起始行号,结束行号s#^#//#g 例如: 注释代码3到15行,"//"可以是其他的"" :3,15s# ...
- 各种webservice调用地址
http://www.webxml.com.cn/zh_cn/web_services.aspx
- 如何清除Xcode8打印的系统日志
Xcode升级成8之后,就会发现控制台打印的日志莫名其妙的变得超级多,最关键的是很多都是没有用的东西,而有些有用的东西却淹没在那无任何卵用的里面,在这我就说一下如何关掉这些没有用的日志. 1.直接快捷 ...
- php gzcompress() 和gzuncompress()函数实现字符串压缩
当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的. PHP提供了 gzcompress() 和gzuncompress() 函数: $string = “Lorem ipsum do ...
- 主机ping不同虚拟机
前提:今天加班时,一不小时把网线踢掉了,然而虚拟机怎么都ping不通了,试过很多办法; 最后.... 简单粗暴的重启了我的主机,对,是主机,不是虚拟机,ok,问题解决; over...
- unicode 和 utf8
关于 unicode utf8 文章来自于 http://blog.csdn.net/tge7618291/article/details/7599902 ascii 主要来表示英文.但是要全世界那么 ...