事件就是调用一个方法自动触发一系列方法:
1.申明delegate
2.申明事件event
3.触发事件的方法
4.注册事件引发的方法,通过delegate
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Event 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 EventTest e = new EventTest(5); 14 e.SetValue(10); 15 16 //注册事件引发的方法委托 17 e.ChangeNum += new EventTest.NumManipulateChangeHandle(EventTest.EventFired); 18 e.SetValue(100); 19 20 I myI = new MyClass(); 21 myI.MyEvent += new MyDelegate(MyPrivate); 22 myI.FiredWay(); 23 24 Console.ReadLine(); 25 26 27 } 28 29 private static void MyPrivate() 30 { 31 Console.WriteLine("My Event fired!"); 32 } 33 34 public class EventTest 35 { 36 //属性 37 public int value; 38 //声明委托 39 public delegate void NumManipulateChangeHandle(); 40 //声明事件 41 public event NumManipulateChangeHandle ChangeNum; 42 //构造函数 43 public EventTest(int n) 44 { 45 SetValue(n); 46 } 47 //委托的事件 48 public static void EventFired() 49 { 50 Console.WriteLine("Binded event fired!"); 51 } 52 //触发事件的方法 53 protected virtual void OnNumChanged() 54 { 55 if (ChangeNum != null) 56 { 57 ChangeNum(); 58 } 59 else 60 { 61 Console.WriteLine("Event fired!"); 62 } 63 } 64 //调用触发事件的方法 65 public void SetValue(int n) 66 { 67 if (value != n) 68 { 69 value = n; 70 OnNumChanged(); 71 } 72 } 73 } 74 75 public delegate void MyDelegate(); 76 77 interface I 78 { 79 event MyDelegate MyEvent; 80 81 void FiredWay(); 82 83 } 84 85 public class MyClass : I 86 { 87 public event MyDelegate MyEvent; 88 89 public void FiredWay() 90 { 91 if (MyEvent != null) 92 { 93 MyEvent(); 94 } 95 } 96 } 97 98 99 } 100 }