C#教程
主页 > 软件编程 > C#教程 >

c#之事件用法的详细介绍

2022-04-11 | 秩名 | 点击:

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

//事件发布类

        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";

            }

        }

客户端代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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();

 

            }

        }

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

原文链接:https://www.cnblogs.com/afei-24/p/6801637.html
相关文章
最新更新