.NET零基础入门05:委托与事件

简介: 一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG。但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了。 当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了。

一:前言

本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG。但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了。

当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了。委托与事件,如果只是泛泛的说一下,可能就是一两句话。但是,我们的课程要遵循一个原则:知其然,知其所以然。所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托和事件这两个概念。

同时,本课程还要教会大家使用一个工具,分析代码。

 

二:委托的现实场景:卖家委托快递去送货?

任何事情,首先都要问一个为什么。这里的问题是:为什么卖家要委托快递去送货?

因为他干不了。他在北京卖一个壶到上海,他不应该、也没能力自己跑到上海交给人家。所以他要“委托”给别人来做这件事情。

在代码的世界中,也是这样,我们的打老鼠游戏中,现在所有的逻辑代码都在窗体的后台中,随着我们学习面向对象,对代码进行重构之后,业务逻辑代码就会放到别的类中,这个“别的类”要负责“游戏开始”的逻辑,其中“游戏开始”的逻辑中有一个环节就是要在界面上显示”游戏开始“。因为业务类不拥有窗体,所以它就不能显示“游戏开始”,这个时候“委托”就派上用场了。也就是业务类不应该、也没能力直接对窗体显示“游戏开始”,于是,它“委托”窗体显示“游戏开始”。

 

三:委托是什么?

我们还是先回到卖家卖壶的例子来描述:“委托是什么”。实际上,卖家委托快递送货,需要如下一些代码:

wps_clip_image-27023

“委托是什么”这个问题是表象,实际上它还隐藏着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处,修改为:

wps_clip_image-27310

“委托”就变成“事件”了。

使用事件后,你可以为你的委托变量_sendProduct,增加多个方法,你看,代码中的位置3处,不再是个“=”号,而是一个“+=”号了。

Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
6月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
353 2
|
6月前
VB.NET—窗体引起的乌龙事件
VB.NET—窗体引起的乌龙事件
63 0
|
C++
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
在实际项目过程中,经常可能遇到被引用的项目要向上传递消息,但是又不能通过方法进行返回等操作,这个时候委托就派上用场了。以下使用委托,来实现被引用的项目向上传递消息的小教程,欢迎各位大佬提供建议。1、新增控制台项目(一般在CS架构中会用的比较多,用于跨线程传递消息使用)。此处用一个控制台项目来模拟演示使用委托进行消息事件的传递教程。
102 0
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
|
JSON 物联网 数据格式
阿里云物联网.NET Core客户端|CZGL.AliloTClient:6.设备事件上报
阿里云物联网.NET Core客户端|CZGL.AliloTClient:6.设备事件上报
419 15
阿里云物联网.NET Core客户端|CZGL.AliloTClient:6.设备事件上报
|
物联网 网络性能优化
阿里云物联网NET Core 客户端 CZGL.AliloTClient:9.自定义 委托事件方法
阿里云物联网NET Core 客户端 CZGL.AliloTClient:9.自定义 委托事件方法
256 15
|
物联网 网络性能优化 开发工具
.NET Core 跨平台物联网网开发:设置委托事件(二)
.NET Core 跨平台物联网网开发:设置委托事件(二)
288 0
.NET Core 跨平台物联网网开发:设置委托事件(二)
|
JSON 物联网 网络性能优化
NET Core 跨平台物联网开发 SDK属性、方法、委托、类(四)
NET Core 跨平台物联网开发 SDK属性、方法、委托、类(四)
282 0
|
物联网 网络性能优化
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:9. 自定义委托事件方法
CZGL.AliIoTClient 有7个委托事件,设置了默认的方法。你可以通过下面的方法使用默认的方法绑定到委托事件中。 public void UseDefaultEventHandler() 1)默认的方法 收到服务器下发属性设置时: public void Default_PubPrope...
4071 0
|
物联网 网络性能优化
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:8. 委托事件
CZGL.AliIoTClient 里设置了 7 个委托事件,在程序的不不同生命周期触发。 1)7个委托事件 /// <summary> /// 服务器属性设置 /// </summary> public PublishPropert...
981 0