C#基础学习之事件的理解和应用

事件的使用和委托类似,也是分四步来实现:声明委托、定义事件、注册事件、调用事件

我们先看一下事件的定义

//定义委托
public delegate void PublishEventHandler(string msg);
//定义事件
public event PublishEventHandler OnPublish;

事件注册和取消注册是用+=和-=方法名来完成的,如

publisher.OnPublish += method;

最后就可以调用事件了

OnPublish(msg);

我们同样使用一个例子来理解事件,学习事件是怎么使用的。

我们现在完成一个发布订阅的过程,由发布者发布消息,订阅者接受处理

看示例代码

发布者类:

public class Publisher
    {
        //定义委托
        public delegate void PublishEventHandler(string msg);
        //
        public event PublishEventHandler OnPublish;

        public void SendMessage(string msg)
        {
            Console.WriteLine(string.Format("发布一个消息:{0}", msg));
            //
            if (OnPublish != null)
            {
                //表示事件已注册
                OnPublish(msg);
            }
        }
    }

订阅者类

public class Receiver
    {
        public void ReceiveMessage(string msg)
        {
            Console.WriteLine(string.Format("接收一个消息:{0}", msg));
        }
}
定义一个执行类,看事件如何调用    
public class EventExecutor
    {
        public static void Run()
        {
            Publisher publisher = new Publisher();
            string msg = "今天发工资了";
            Receiver receiver = new Receiver();
            //注册事件,订阅
            publisher.OnPublish += receiver.ReceiveMessage;
            publisher.SendMessage(msg);
        }
    }

我们发现事件是依附于委托存在的,使用上和委托几乎相同,都是先声明再注册调用。

上面的例子我们直接使用委托实现也很简单,在Publisher类我们定义委托对象

//使用委托实现
public PublishEventHandler publishEventHandler;

调用类中如下注册

//使用委托实现
publisher.publishEventHandler = new Publisher.PublishEventHandler(receiver.ReceiveMessage);
那到底事件的存在意义是什么

事件其实是使用了委托链,类似对委托的一种封装,在注册事件时,我们只能通过+=Method的形式进行注册,而无法再像委托注册的时候直接给委托对象赋值。

其他的我也不太清楚哪些是委托不能完成的,还请大神指点

时间: 2024-08-29 17:34:38

C#基础学习之事件的理解和应用的相关文章

salesforce lightning零基础学习(四) 事件(component events)简单介绍

lightning component基于事件驱动模型来处理用户界面的交互.这种事件驱动模型和js的事件驱动模型也很相似,可以简单的理解成四部分: 1.事件源:产生事件的地方,可以是页面中的输入框,按钮等等: 2.事件: 点击,失去焦点,初始化等等: 3.事件对象:当在事件源触发某个事件的时候,一般会产生一个事件对象,记录着事件的事件源相关信息以及相关的事件信息: 4.事件处理程序(Event Handler):对当前的事件进行程序的处理或者函数. 接下来回到lightning中.在lightn

C#基础学习之委托的理解和应用

委托的使用和语法定义 委托的使用是由四步来完成的,依次为:声明委托.创建委托对象.委托关联方法.调用 我们用一个例子来说明这四步如何操作,我们完成一个老板委托员工写报告的实例,看如何实现. 首先我们应该定义两个类,老板类Boss和员工类Employee,老板委托员工写报告,其实是老板什么都没做,而是告诉员工去做事情(写报告), 那我们的定义如下 public class Boss { //声明委托 public delegate void DoWorkEventHandler(string co

Android 进阶学习:事件分发机制全然解析,带你从源代码的角度彻底理解(上)

http://blog.csdn.net/guolin_blog/article/details/9097463 事实上我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客開始,就零零散散在好多地方使用到了Android事件分发的知识.也有好多朋友问过我各种问题,比方:onTouch和onTouchEvent有什么差别,又该怎样使用?为什么给ListView引入了一个滑动菜单的功能,ListView就不能滚动了?为什么图片轮播器里的图片使用Button而不用ImageView?

c#委托的理解和基础学习

 C#委托的理解和基础学习 Delegate,委托,是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的.用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西.在使用委托的时候,你可以像对待一个类一样对待它.即先声明,再实例化.只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托. 比如:

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

C#学习总结 事件(一)深入多播委托

好久没写文章了,之前说要总结一下事件这个概念,今天趁着工作闲暇,谈谈我对C#事件事件的理解,如果有什么不对的地方,望各位大神指点. 真正的理解事件,还是要很好的理解委托,不然你永远不会明白很多教科书上的一句话:事件是一个特殊的委托,今天我们就来探寻一下:为什么说事件是一个特殊的委托,之前我谈论了委托的一些相关基础知识,其实还有一些关于委托更深层次的东西没有说,那么在今天谈事件这个知识之前还是继续从委托说起: 不知道有没有人了解C语言的函数指针这个概念,使用函数指针来创建回调函数,使用回调可以把函

【音视频连载-007】基础学习篇-SDL 播放 PCM 音频文件(上)

音视频学习入门技术文章连载: 技术开发故事会连载 [音视频连载-001]基础学习篇-SDL 介绍以及工程配置 [音视频连载-002]基础学习篇-SDL 创建窗口并显示颜色 [音视频连载-003]基础学习篇-SDL 消息循环和事件响应 [音视频连载-004]基础学习篇-SDL 加载图片并显示 [音视频连载-005]基础学习篇-SDL 加载 YUV 文件并显示 [音视频连载-006]基础学习篇-SDL 播放 YUV 视频文件]) 在前面的文章中已经能够利用 SDL 去播放 YUV 视频文件了,接下来

Yaf零基础学习总结3-Hello Yaf

Yaf零基础学习总结3-Hello Yaf 上一次我们已经学习了如何安装yaf了,准备工作做好了之后我们来开始实际的编码了,码农都知道一个经典的语句就是“Hello World”了,今天我们开始入手Yaf,目标只要能得到“Hello Yaf”就可以了,不多说,下面开始了.(注:需要读者有一定的MVC知识基础,最好用过一些其他简单的框架) 1.组织目录结构 对于使用过框架的来说这点很好理解,对于没使用过框架的来说建议先别在这死磕,先记着吧,简单点就是对于我们的文件结构做一些规定,让自己和别人都能看

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu