.NET 委托与事件的一个小例子
第一次发随笔 有点小紧张 打错字了各位大神别笑话 ^_^
本人做开发的时间已经不短了 一直对委托与事件这块很懵懂 所以这两天就一直在看这方面的知识 终于被我拿下(可惜不是妹子) 不说精通 能能好的运用就行
下面我就把这个小栗子分享给大家 希望那些还对委托与事件处于懵懂的有一点帮助(这栗子可是很经典的)
废话不多说了 下面正式开始
首先想要熟练运用 最好能掌握 发布类与订阅类的关系
首先定义发布类:
1 public class Student 2 { 3 private string name; 4 5 public string Name 6 { 7 get { return name; } 8 set { name = value; } 9 } 10 11 public Student(string _name) 12 { 13 this.name = _name; 14 } 15 16 /// <summary> 17 /// 想睡觉了 想睡就睡 18 /// </summary> 19 public void WantSleep() 20 { 21 Console.WriteLine("学生" + name + "想睡觉了"); 22 23 } 24 25 public void FindTeacher() 26 { 27 Console.WriteLine("发现班主任正在窗口观察学生"); 28 TellMeEventArgs tellme=new TellMeEventArgs(3);//班主任 29 //发出通知 通知睡觉的! 30 if (OnTellMeTeacherChecking != null) 31 { 32 Console.WriteLine("小手轻轻的那么一戳 都懂的"); 33 OnTellMeTeacherChecking(this, tellme); 34 } 35 } 36 37 38 /// <summary> 39 /// 告诉同桌 如果下课或放学或老师来了 提示一下 ^-^ 40 /// </summary> 41 /// <param name="SideStudent">要告诉的同桌对象</param> 42 public void TellSide(Student SideStudent) 43 { 44 if (SideStudent != null)//关键是你要有同桌 没同桌就Over了 45 { 46 if (SideStudent.OnTellMeTeacherChecking == null) 47 { 48 Console.WriteLine(name+"对"+SideStudent.Name+ "说:我睡一会儿,等下班主任来了 提醒提醒"); 49 SideStudent.OnTellMeTeacherChecking += new TellMeHandler(TellSide);//订阅事件 50 Console.WriteLine("同学" + SideStudent.Name + "的回复: No Problem"); 51 } 52 53 } 54 } 55 56 /// <summary> 57 /// 通知睡觉的学生 58 /// </summary> 59 /// <param name="sender"></param> 60 /// <param name="e"></param> 61 public void TellSide(Object sender,TellMeEventArgs e) 62 { 63 switch (e.TellMeType) 64 { 65 case 1: 66 Console.WriteLine("下课了 怎么玩呢?"); 67 break; 68 case 2: 69 Console.WriteLine("放学了 回家吃饭"); 70 break; 71 case 3: 72 Console.WriteLine("同学" + name + "打起十二分精神努力学习中..... 32个赞"); 73 break; 74 default: 75 Console.WriteLine("什么状况?"); 76 break ; 77 } 78 } 79 80 public delegate void TellMeHandler(Object sender, TellMeEventArgs e);//通知委托 81 82 public TellMeHandler OnTellMeTeacherChecking; 83 84 }
然后定义事件:
1 public class TellMeEventArgs : EventArgs 2 { 3 private int tellMeType;//1:下课 2:放学 3:老师来了 4 5 public int TellMeType 6 { 7 get { return tellMeType; } 8 set { tellMeType = value; } 9 } 10 11 public TellMeEventArgs(int _tellMeType) 12 { 13 this.tellMeType = _tellMeType; 14 } 15 }
后面就是我们的班主任了:
1 public class Teacher 2 { 3 private string name; 4 5 public string Name 6 { 7 get { return name; } 8 set { name = value; } 9 } 10 11 public Teacher(string _name) 12 { 13 this.name = _name; 14 } 15 16 public void CheckStudenState() 17 { 18 Console.WriteLine("班主任静悄悄的在后面观察学生学习状态"); 19 } 20 }
最后就开始上课了
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Student stuLi = new Student("李X");//具体姓名就不公布了 6 Student stuWang = new Student("王X"); 7 Console.WriteLine("铃铃铃铃铃铃铃铃 额 上课了"); 8 Thread.Sleep(2000);// 15分钟后[暂停2秒] 9 Console.WriteLine("已上课15分钟"); 10 stuLi.WantSleep();//瞌睡来了 想睡觉了 11 stuLi.TellSide(stuWang);//给王X说说 老规矩 12 Teacher thacher = new Teacher("徐XX");//班主任即将降临 13 thacher.CheckStudenState();//班主任到教室最后一排的窗口观察了 14 Console.WriteLine("学生{0}东张西望中...." , stuWang.Name); 15 stuWang.FindTeacher(); 16 } 17 }
运行效果图如下 :
有什么不对的希望大家不吝赐教 ^_^
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。