.NET零基础入门05:委托与事件
一:前言
本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG。但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了。
当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了。委托与事件,如果只是泛泛的说一下,可能就是一两句话。但是,我们的课程要遵循一个原则:知其然,知其所以然。所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托和事件这两个概念。
同时,本课程还要教会大家使用一个工具,分析代码。
二:委托的现实场景:卖家委托快递去送货?
任何事情,首先都要问一个为什么。这里的问题是:为什么卖家要委托快递去送货?
因为他干不了。他在北京卖一个壶到上海,他不应该、也没能力自己跑到上海交给人家。所以他要“委托”给别人来做这件事情。
在代码的世界中,也是这样,我们的打老鼠游戏中,现在所有的逻辑代码都在窗体的后台中,随着我们学习面向对象,对代码进行重构之后,业务逻辑代码就会放到别的类中,这个“别的类”要负责“游戏开始”的逻辑,其中“游戏开始”的逻辑中有一个环节就是要在界面上显示”游戏开始“。因为业务类不拥有窗体,所以它就不能显示“游戏开始”,这个时候“委托”就派上用场了。也就是业务类不应该、也没能力直接对窗体显示“游戏开始”,于是,它“委托”窗体显示“游戏开始”。
三:委托是什么?
我们还是先回到卖家卖壶的例子来描述:“委托是什么”。实际上,卖家委托快递送货,需要如下一些代码:
“委托是什么”这个问题是表象,实际上它还隐藏着5个小问题:
1:委托声明是什么?
2:委托变量是什么?
3:什么是委托变量赋值?
4:什么是委托处理器?
5:如何调用委托?
在上图代码中,这5个小问题的序号正好对应了图中的数字部分,
首先,程序得有一个地方声明委托;
其次,卖家自己还得定义一个委托变量;
再次,通过某种形式给卖家的委托变量赋值,这个值是什么呢,就是一个委托处理器的“引用”。委托处理器就是一个方法,所以,赋值的过程,就是将方法的引用赋值给委托变量。
最后,调用委托,实际上,就是使用委托变量。
备注,要注意的是,委托声明和委托处理器的返回值和参数必须保持一致。
四:委托本质上是什么?
上文我们阐述了委托是什么,实际我们仅仅阐述的是委托的表象是什么,那么,委托本质上是什么呢?
到现在为止,我们已经学过了两个类型的概念:类和枚举。我们在这里要强调的是,上文代码的委托声明中的”SendProductHandler“实际上,是一个类,我们应该将其看为:
internal class SendProductHandler : System.MulticastDelegate
{
public SendProductHandler(object @object, IntPtr method)
{
}
public virtual IAsyncResult BeginInvoke(string product, AsyncCallback callback, object @object)
{
}
public virtual void EndInvoke(IAsyncResult result)
{
}
public virtual void Invoke(string product)
{
}
}
为什么是这样的呢,相信你看了下面的视频就会明白。
五:视频
非公开部分,请联系最课程(www.zuikc.com)观看。
六:事件是什么?
知道了委托,我们来看事件,将小节”二:委托是什么“中的代码2和3处,修改为:
“委托”就变成“事件”了。
使用事件后,你可以为你的委托变量_sendProduct,增加多个方法,你看,代码中的位置3处,不再是个“=”号,而是一个“+=”号了。
.NET零基础入门05:委托与事件的更多相关文章
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现
073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...
- 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数
067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
随机推荐
- salesforce
salesforce&apex salesforce开发的小心得 salesforce零基础学习(七十七)队列的实现以及应用 摘要: 队列和栈简单的区别为栈是后进先出,队列是先进先出.队列也是 ...
- 历数依赖注入的N种玩法
历数依赖注入的N种玩法 在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程 ...
- bzoj 1151: [CTSC2007]动物园zoo
思路:因为每个人最多只能看到五个动物,我们考虑将其状压,f[ i ][ s ] 表示到了第 i 个位置, i, i + 1, i + 2, i + 3, i + 4这四个动物的状态为s, 此时的最大值 ...
- Mysql 查看用户
一.查看用户和允许用户登录的地址权限. use mysql select host,user from user; 二.查看用户和所有用户权限 select * from user \G
- 008 jquery过滤选择器-----------(子元素过滤选择器)
1.介紹 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- cygwin安装sshd服务并实现无密码登录
http://blog.csdn.net/cybercode/article/details/7080743 这篇文章主要是为我在win7(64位)下搭建hadoop环境所准备的.首先参照在cygwi ...
- Spring-Session实现Session共享实现原理以及源码解析
知其然,还要知其所以然 ! 本篇介绍Spring-Session的整个实现的原理.以及对核心的源码进行简单的介绍! 实现原理介绍 实现原理这里简单说明描述: 就是当Web服务器接收到http请求后,当 ...
- UOJ.52.[UR #4]元旦激光炮(交互 思路)
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...
- BZOJ.4514.[SDOI2016]数字配对(费用流SPFA 二分图)
BZOJ 洛谷 \(Solution\) 很显然的建二分图后跑最大费用流,但有个问题是一个数是只能用一次的,这样二分图两部分都有这个数. 那么就用两倍的.如果\(i\)可以向\(j'\)连边,\(j\ ...
- hdu 4407 容斥原理
题意: 1 //一组数据 3 3 //数字为1-3,3次运算 2 2 3 //将2号位变成3 1 1 3 4 //计算1-3号位上与4互质的数的和 1 2 3 6 好题,需要重复练习 #include ...