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与数据库开 ...
随机推荐
- mac os设置root密码
不知怎么忘记mac os系统的root密码了 方法一: 首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uw / 然后回车.输 ...
- 163邮件出错:不允许使用邮箱名称。 服务器响应为: authentication is required,smtp7,C8CowEDpS0+Uke9VvSmXBg--.546S2 1441763733
原因:用163邮箱发邮件,需开启smtp服务,开启服务时,要求使用客户端授权码. 在.net中,使用smtp发邮件,在验证中使用的密码,是上面所讲的客户端授权码,而不是注册和web登录时用的邮箱密码. ...
- Docker - 入门
术语 1. 镜像(image)与容器(container) 镜像是指文件系统快照或tar包. 容器是指镜像的运行态(时) 2.宿主机管理 设置/配置一台物理服务器或虚拟机,以便用于运行Docker容器 ...
- Angular2 组件通信
1. 组件通信 我们知道Angular2应用程序实际上是有很多父子组价组成的组件树,因此,了解组件之间如何通信,特别是父子组件之间,对编写Angular2应用程序具有十分重要的意义,通常来讲,组件之间 ...
- VMWARE修改CPUID
在cmd shell下执行wmic cpu get ProcessorId命令,可是查看机器的cpuID,但这个命令显示的只是2组ID,实际CPUID,有4组 通过更改虚拟机配置文件.vmx可是实现任 ...
- DIV+CSS中标签dl dt dd常用的用法
转自:http://smallpig301.blog.163.com/blog/static/9986093201010262499229/ < dl>< /dl>用来创建一个 ...
- android studio使用ndk,jni随记
1.下载ndk(会下载到sdk目录下) 2.配置 3.配置build.gradle(app) android { defaultConfig { ndk { moduleName "JniD ...
- git与github使用
Git和Github简单教程 目录: 零.Git是什么 一.Git的主要功能:版本控制 二.概览 三.Git for Windows软件安装 四.本地Git的使用 五.Github与Git的关联 六. ...
- android初级篇之apk签名key keystore格式转pk8+x509.pem
转自:http://www.jianshu.com/p/3bd5c68cc44d 常用的android的签名工具有两个即jarsigner 和apksigner.这两种使用的key格式不一样,keys ...
- 《Mastering.Ext.JS. 》书上主要示例都搞了个样子出来,纪念