c#之事件用法

 更新时间:2022年04月11日 17:29:39   作者:Ruby_Lu  
这篇文章介绍了c#中事件的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

事件基于委托,可以为任何一种委托类型提供一种发布\订阅机制。
使用event关键字将一个委托类型定义为事件。
下面通过一个例子介绍事件:

//事件发布类
        public class PublishEvent
        {
            public delegate string Display(string str);
            public event Display DisplayEvent;

            //客户端代码通过调用这个方法触发事件
            public void Shows(string str)
            {
                if (DisplayEvent != null)
                {
                    DisplayEvent(str);
                }
            }

        }

        //事件侦听类,这个类订阅事件
        public class Listen1
        {
            public string MakeAlert(string str)
            {
                Console.WriteLine(str + "Listen1");
                return str + "Listen1";
            }
        }
        public class Listen2
        {
            public string ShowMsg(string str)
            {
                Console.WriteLine(str + "Listen2");
                return str + "Listen2";
            }
        }

客户端代码:

class Program
        {
            static void Main()
            {
                PublishEvent pe = new PublishEvent();
                Listen1 l1 =  new Listen1();
                Listen2 l2 = new Listen2();

                //变量l1和l2订阅了事件
                pe.DisplayEvent += l1.MakeAlert;
                pe.DisplayEvent += l2.ShowMsg;

                //触发事件
                pe.Shows("事件");

                Console.ReadKey();

            }
        }

事件就是一个特殊的委托(https://www.jb51.net/article/244051.htm),它是一个用于事件驱动模型的专用委托.你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发。也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它,而事件不能直接调用,只能通过某些操作触发。除此之此,事件拥有委托的所有功能,包括多播特性。即事件可以有多个事件处理函数,委托同样也可以是个多播委托.
事件是封装过的委托实例;委托是类型,事件是实例!
EventHandler<TEventArgs>.NET自带的委托,也用于定义事件。

到此这篇关于c#之事件用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C# 字符串、数组和List的截取和转换实例

    C# 字符串、数组和List的截取和转换实例

    下面小编就为大家分享一篇C# 字符串、数组和List的截取和转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • 使用C#实现RTP数据包传输 参照RFC3550

    使用C#实现RTP数据包传输 参照RFC3550

    本篇文章小编为大家介绍,使用C#实现RTP数据包传输 参照RFC3550,需要的朋友参考下
    2013-04-04
  • 用c# 自动更新程序

    用c# 自动更新程序

    这篇文章主要介绍了用c# 自动更新程序的代码示例,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下
    2020-11-11
  • C#定时器和随机数

    C#定时器和随机数

    在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。本文我们就来简单介绍一下定时器和随机数。
    2015-06-06
  • C#使用时序数据库InfluxDB的教程详解

    C#使用时序数据库InfluxDB的教程详解

    InfluxDB是一个开源的时序数据库,可以自动处理时间序列数据,这篇文章主要为大家详细介绍了C#如何使用InfluxDB,感兴趣的小伙伴可以跟随小编一起了解下
    2023-11-11
  • C#实现农历日历的方法

    C#实现农历日历的方法

    这篇文章主要介绍了C#实现农历日历的方法,详细分析了使用C#实现农历日历的完整步骤,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • c#如何使用 XML 文档功能

    c#如何使用 XML 文档功能

    这篇文章主要介绍了c#如何使用 XML 文档功能,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-10-10
  • Unity实现鼠标点2D转3D进行旋转

    Unity实现鼠标点2D转3D进行旋转

    这篇文章主要为大家详细介绍了Unity实现鼠标点2D转3D进行旋转,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Unity实现游戏伤害数字显示HUD的方法

    Unity实现游戏伤害数字显示HUD的方法

    游戏中收到伤害掉血,会有飘动的伤害数值,本文主要介绍Unity实现游戏伤害数字显示HUD的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C#数据适配器DataAdapter

    C#数据适配器DataAdapter

    这篇文章介绍了C#中的数据适配器DataAdapter,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论