C#基础知识回顾--委托事件

简介: 在上一篇看到他我一下子就悟了(续)---委托,被人狂喷。说写的太空,没有什么内容之类的。所以准备在这里重写下,不过还是按着以前的方式尽量简单的写。这里我们以打篮球为例。 第一步:首先,其他对象订购事件        当发球的球员产生它的发球事件之前,其他球员需要订购这个事件,采用这种方式,只要出现一个发球事件,其他球 员就能够知道。

在上一篇看到他我一下子就悟了(续)---委托,被人狂喷。说写的太空,没有什么内容之类的。所以准备在这里重写下,不过还是按着以前的方式尽量简单的写。这里我们以打篮球为例。

第一步:首先,其他对象订购事件

       当发球的球员产生它的发球事件之前,其他球员需要订购这个事件,采用这种方式,只要出现一个发球事件,其他球

员就能够知道。

 

第二步:触发事件

       当球被发出时,此时发球员对象产生一个新事件

 

第三步:球产生一个事件

         创建一个新事件,这个事件还有一些参数,如球的距离和轨迹。这些参数作为EventArgs对象的一个实例关联到事件,然后

事件发出,所有监听对象都能得到这个事件。一旦事件产生,所有订购者都会得到通知,并做一些处理。

第四步:订购者得到通知   

            由于其他球员对象都订购了发球球员对象的发球事件,所以这些对象会得到通知,并先后调用他们的事件处理方法。事件处

理程序就是产生事件时订购者对象运行的方法,一旦发球者产生了其事件,就会创建一个BallEventArgs对象,其中包含球的轨迹

和距离,从而将个对象传递到订购者的事件处理程序。

第五步:各个对象处理事件

           现在,其他球员都会以他们自己的方式处理发球事件。不过并不是同时运行---他们的事件处理程序会先后得到调用,并以

BallEventArgs对象的一个引用作为参数。     

 

下面我们分析下把各个部分连接起来

1.我们需要一个标示事件参数的对象


        要记住,Play事件(我们下面把发球事件都说成play事件)有一些需要携带的参数。所以我们需要一个简单的对象来表示这些参数。

为此,.NET 提供了一个标准的类,名为EventArgs,不过这个类没有任何成员。它的目的只有一个,就是允许将你的事件的参数对象传

递到事件事件处理程序加以使用。 以下是事件参数类的声明

     public class BallEventArgs:EventArgs

 

2.接下来需要在产生事件的类中定义这个事件


      我们在SendPlayer类中(就是发球球员类,汗,英文不是太好,见谅)定义一个事件,以便其他对象订购这个事件。
声明如下:


      public event EventHandler Play;

event关键字后面的EventHandler不是C#的保留字,它是.NET提供的。之所以需要它,是为了告诉订购事件的对象。

他们的事件处理方法应该是什么样子(有怎样的签名)

即他们的事件处理程序应当有两个参数,一个参数是名为sender的object,另一个参数是名为e的EventArgs引用。

3.订购类需要事件处理方法

          订购SendPlayer的Play事件的各个对象都需要一个事件处理程序。其实我们早就知道事件处理程序是如何工作的,

你拉一个Button,然后双击它,IDE就自动给你增加一个click事件。所以Play的事件你看起来应该很熟悉。

          

             void  sendPlayer_Play(object sender,EventArgs e)

C#中并没有规则要求事件处理程序必须按某种方式命名,不过这是一种非常标准的命名约定:首先是对象引用名,

后面一个下划线,再后面是事件名。

4.各个对象订购事件

一旦建立了事件处理程序,其他球员对象需要关联他们自己的事件处理程序。每个对象都有自己特定的

sendPlayer_Play方法,对这个事件做出不同的响应。所以,

如果有一个SendPlayer对象引用变量或字段,名为sendPlayer,可以用+=操作符关联事件处理程序:

 

sendPlayer.Play+=new EventHandler(sendPlayer_Play);

5.SendPlayer对象产生一个事件通知订购者球赛开始。

既然已经创建事件,那么触发这个事件就很容易,只需要调用Play事件。

if(Play!=null)

Play(this,e);

基本的步骤都有了,大家可以按照步骤写自己的事件了。

目录
相关文章
|
2月前
|
C#
C#一分钟浅谈:委托与事件的实现方式
本文详细介绍了C#编程中委托与事件的基础知识及应用场景。首先解释了委托的概念,包括定义与使用方法;接着介绍了事件这一基于委托的特殊类型,展示了如何在类中定义事件及跨类订阅与处理事件;最后讨论了常见问题如事件未处理异常、重复订阅及内存泄漏等,并提出了相应的解决方案。通过本文,读者将全面掌握委托与事件的使用技巧,提升应用程序的设计与开发水平。
116 7
|
3月前
|
C#
由浅入深理解C#中的事件
由浅入深理解C#中的事件
109 19
|
3月前
|
编译器 C#
C#中内置的泛型委托Func与Action
C#中内置的泛型委托Func与Action
65 4
|
3月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
79 0
|
3月前
|
C#
C#中的委托(一)
C#中的委托(一)
37 1
|
3月前
|
存储 算法 安全
C#语言进阶(二)—事件全解
C#语言进阶(二)—事件全解
37 0
|
3月前
|
C# C++
C#语言进阶(一)—委托
C#语言进阶(一)—委托
50 0
|
6月前
|
存储 安全 C#
C# - 委托与事件
这篇文档介绍了C#中的委托和事件。委托是存储方法引用的类型,支持回调、事件处理,具有引用方法、类型安全、多播性等特性,并在异步编程中发挥作用。事件是委托的封装,提供保护和订阅机制,防止外部直接访问。当需要在类内部控制方法调用,防止外部误触发时,可使用事件。
|
5月前
|
C#
C#||委托和事件的实例
C#||委托和事件的实例
|
6月前
|
C#
c#委托详解
c#委托详解
38 0