码迷,mamicode.com
首页 > Windows程序 > 详细

C# 特性之事件

时间:2017-05-23 21:41:34      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:blog   c#   F12   rgs   this   console   运行   write   object   

定义事件:

技术分享

技术分享

事件访问修饰符一般为public 定义为公共类型可以使事件对其他类可见

事件定义中还包括委托类型,既可以是自定义委托类型也可以是EventHandler(预定义)

运用"+="运算符来订阅事件,运用"-="运算符来取消订阅事件

例:自定义委托事件

技术分享
 1  class HelloWorld
 2    {
 3       //定义委托类型
 4       public delegate void Marry(string msg);
 5       //使用自定义委托类型定义事件
 6       public event Marry MarryEvent;
 7        //发出事件
 8        public void News(string msg)
 9        {
10            //判断是否绑定了事件处理方法
11            if(MarryEvent!=null)
12            {
13                //触发事件
14                MarryEvent(msg);
15            }
16            
17        }
18       static void Main(string[] args)
19       {
20         //初始化新郎官对象
21           HelloWorld helloWorld=new HelloWorld();
22           //实例化朋友
23           Friend zhangsan=new Friend("Zhangsan");
24           Friend lishi=new Friend("Lishi");
25           Friend zhaoliu=new Friend("Zhaoliu");
26           //订阅事件
27           helloWorld.MarryEvent += new Marry(zhangsan.SendMessage);
28           helloWorld.MarryEvent += new Marry(lishi.SendMessage);
29           helloWorld.MarryEvent += new Marry(zhaoliu.SendMessage);
30           //发出通知
31           helloWorld.News("他要结婚了,到时来");
32           Console.WriteLine("---------------------------------------");
33           //张三取消订阅
34           helloWorld.MarryEvent -= new Marry(zhangsan.SendMessage);
35           //发出通知
36           helloWorld.News("他要结婚了,到时来");
37          Console.ReadKey();
38       }
39    }
40 
41     class Friend
42     {
43         //字段
44         public string Name;
45         public Friend(string name)
46         {
47             Name = name;
48         }
49         //事件处理函数,该函数需要符合Marry委托定义
50         public    void SendMessage(string message)
51         {
52             //输出信息
53             Console.WriteLine(message);
54             //对事件做出处理
55             Console.WriteLine("{0}收到了到时准时参加",Name);
56         }
57         
58     }
事件的订阅与取消

例:预定义委托事件

技术分享
 1  class HelloWorld
 2    {
 3       //使用自定义委托类型定义事件
 4       public event EventHandler MarryEvent;
 5        //发出事件
 6        public void News(string msg)
 7        {
 8            //判断是否绑定了事件处理方法
 9            if(MarryEvent!=null)
10            {
11                Console.WriteLine(msg);
12                //触发事件
13                MarryEvent(this,new EventArgs());
14            }
15            
16        }
17       static void Main(string[] args)
18       {
19         //初始化新郎官对象
20           HelloWorld helloWorld=new HelloWorld();
21           //实例化朋友
22           Friend zhangsan=new Friend("Zhangsan");
23           Friend lishi=new Friend("Lishi");
24           Friend zhaoliu=new Friend("Zhaoliu");
25           //订阅事件
26           helloWorld.MarryEvent += new EventHandler(zhangsan.SendMessage);
27           helloWorld.MarryEvent += new EventHandler(lishi.SendMessage);
28           helloWorld.MarryEvent += new EventHandler(zhaoliu.SendMessage);
29           //发出通知
30           helloWorld.News("他要结婚了,到时来");
31           Console.WriteLine("---------------------------------------");
32           //张三取消订阅
33           helloWorld.MarryEvent -= new EventHandler(zhangsan.SendMessage);
34           //发出通知
35           helloWorld.News("他要结婚了,到时来");
36          Console.ReadKey();
37       }
38    }
39 
40     class Friend
41     {
42         //字段
43         public string Name;
44         public Friend(string name)
45         {
46             Name = name;
47         }
48         //事件处理函数,该函数需要符合Marry委托定义
49         public    void SendMessage(object s,EventArgs e)
50         {
51             //对事件做出处理
52             Console.WriteLine("{0}收到了到时准时参加",Name);
53         }
54         
55     }
使用预定义委托事件订阅与取消

运行结果:

技术分享

在VS中可以用F12查看EventHandler的定义

public delegate void EventHandler(object sender, EventArgs e);

(1)该委托返回类型是void因此实例化委托类型的方法也要满足这点

(2)第一个参数sender负责保存对触发事件对象的引用,其类型为object

(3)第二个参数e保存事件数据,EventArgs类也是.NET类库中定义的类,它不保存任何火数据

 

C# 特性之事件

标签:blog   c#   F12   rgs   this   console   运行   write   object   

原文地址:http://www.cnblogs.com/lbonet/p/6895982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!