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与数据库开 ...
随机推荐
- oracle11gR2静默安装
oracle11G静默安装过程——linux环境 1.操作系统及Oracle版本 Linux版本:CentOS release 6.8 (Final) Oracle版本:Oracle Database ...
- swing中JTable的使用方法
public static void main(String[] args) { Student s1 = new Student("张三", "001", 0 ...
- day5
作业 作业需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期 ...
- 别老嫌Mac系统难用 这些快捷键你都用过吗
苹果今年10月发布的全新带把儿(bar)的MacBook,轻薄炫酷的外观大受欢迎,其中当然不乏很多从Windows转到Mac阵营的用户.不少习惯了Windows操作习惯的用户在上手Mac时都会觉得非常 ...
- Target runtime com.genuitec.runtime.generic.jee60 is not defined
转载自:http://jingyan.baidu.com/article/d7130635338e3f13fdf47518.html 用eclipse加载别人的工程,报错Target runtime ...
- MyEclipse做一个注册页面,需要注意的地方。
- 如何正确的做WEB端的压力测试
1.对要测试的系统进行分析,明确需要对哪一块做压力测试.比如:淘宝网站双十一期间,秒杀跟支付,此模式用户操作中占比比较大 再比如:游戏,登录--开始战斗--结束战斗这种混合模式在用户操作中占比较大 那 ...
- 基因匹配(bzoj 1264)
Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...
- wamp2.5 配置多端口虚拟主机
1.保证httpd.conf下 Include conf/extra/httpd-vhosts.conf LoadModule php5_module "D:/E/php/wamp/bin/ ...
- js立即调用的函数表达式
1.多种实现 // 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个 (function () { /* code */ })(); ...