软件编程
位置:首页>> 软件编程>> C#编程>> c#之事件用法

c#之事件用法

作者:Ruby_Lu  发布时间:2023-09-22 05:05:28 

标签: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自带的委托,也用于定义事件。

来源:https://www.cnblogs.com/afei-24/p/6801637.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com