对于事件event触发中this的理解
上面是书籍中事件触发中MarryEvent(this,new EventArgs()); 其中this就是类Bridegroon,将this更改为new Bridegroom也是可以的;那么,我本示例中,我们将this更改为其它对象可不可以呢,我们试一下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace EventUseInNET 7 { 8 // 新郎官类,充当事件发布者角色 9 public class Bridegroom 10 { 11 // 使用.NET类库中预定义的委托类型EventHandler来定义事件 12 public event EventHandler MarryEvent; 13 14 // 发出事件 15 public void OnBirthdayComing(string msg) 16 { 17 // 判断是否绑定了事件处理方法 18 if (MarryEvent != null) 19 { 20 Console.WriteLine(msg); 21 22 int a = 5; 23 // 触发事件 24 MarryEvent(a,new EventArgs()); 25 } 26 } 27 28 static void Main(string[] args) 29 { 30 //初始化新郎官对象 31 Bridegroom bridegroom = new Bridegroom(); 32 33 // 实例化朋友对象 34 Friend friend1 = new Friend("张三"); 35 Friend friend2 = new Friend("李四"); 36 Friend friend3 = new Friend("王五"); 37 38 // 使用+=订阅事件 39 bridegroom.MarryEvent += new EventHandler(friend1.SendMessage); 40 bridegroom.MarryEvent += new EventHandler(friend2.SendMessage); 41 42 // 发出通知,此时订阅了事件的对象才能收到通知 43 bridegroom.OnBirthdayComing("朋友们,我结婚了,到时候准时参加婚礼!"); 44 Console.WriteLine("------------------------------------"); 45 46 // 使用-=取消订阅事件,此时李四将收不到通知 47 bridegroom.MarryEvent -= new EventHandler(friend2.SendMessage); 48 49 // 使用+=订阅事件,此时王五可以收到通知 50 bridegroom.MarryEvent += new EventHandler(friend3.SendMessage); 51 52 // 发出通知 53 bridegroom.OnBirthdayComing("朋友们,我结婚了,到时候准时参加婚礼!"); 54 Console.Read(); 55 } 56 } 57 58 // 朋友类 59 public class Friend 60 { 61 // 字段 62 public string Name; 63 64 // 构造函数 65 public Friend(string name) 66 { 67 Name = name; 68 } 69 70 // 事件处理函数,该函数需要符合EventHandler委托的定义 71 public void SendMessage(object s, EventArgs e) 72 { 73 // 对事件做出处理 74 Console.WriteLine(this.Name + "收到了,到时候准时参加"); 75 } 76 } 77 }
我们将22-24行进行了更改,更改为:
int a = 5;
// 触发事件
MarryEvent(a,new EventArgs());
可以发现程序没有报错,也可以正常运行并输出;