[C#] 一个很现实的例子演示C#的事件机制 →→→→→进入此内容的聊天室

来自 , 2019-03-26, 写在 C#, 查看 121 次.
URL http://www.code666.cn/view/be7485be
  1. using System;
  2.  
  3. namespace Vczx.ProCSharp.Event
  4. {
  5. /// <summary>
  6. /// 类EatEventArgs 必须继承自类EventArgs,用来引发事件时封装数据
  7. /// </summary>
  8. public class EatEventArgs : EventArgs
  9. {
  10. public String restrauntName; //饭店名称
  11. public decimal moneyOut; //准备消费金额
  12. }
  13.  
  14. /// <summary>
  15. /// 这个委托用来说明处理吃饭事件的方法的方法头(模式)
  16. /// </summary>
  17. public delegate void EatEventHandler(object sender, EatEventArgs e);
  18.  
  19. /// <summary>
  20. /// 引发吃饭事件(EateEvent)的类Master(主人),这个类必须
  21. /// 1.声明一个名为EatEvent的事件: public event EatEventHandler EatEvent;
  22. /// 2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;
  23. /// 3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。
  24. /// </summary>
  25. public class Master
  26. {
  27. //声明事件
  28. public event EatEventHandler EatEvent;
  29.  
  30. //引发事件的方法
  31. public void OnEatEvent(EatEventArgs e)
  32. {
  33. if (EatEvent != null)
  34. {
  35. EatEvent(this, e);
  36. }
  37. }
  38.  
  39. //当主人饿的时候,他会指定吃饭地点和消费金额。
  40. public void Hungry(String restrauntName, decimal moneyOut)
  41. {
  42. EatEventArgs e = new EatEventArgs();
  43. e.restrauntName = restrauntName;
  44. e.moneyOut = moneyOut;
  45.  
  46. Console.WriteLine("主人说:");
  47. Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元", e.restrauntName, e.moneyOut);
  48.  
  49. //引发事件
  50. OnEatEvent(e);
  51. }
  52. }
  53.  
  54. /// <summary>
  55. /// 类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件
  56. /// </summary>
  57. public class Servant
  58. {
  59. public void ArrangeFood(object sender, EatEventArgs e)
  60. {
  61. Console.WriteLine();
  62. Console.WriteLine("仆人说:");
  63. Console.WriteLine("我的主人, 您的命令是 : ");
  64. Console.WriteLine("吃饭地点 -- {0}", e.restrauntName);
  65. Console.WriteLine("准备消费 -- {0}元 ", e.moneyOut);
  66. Console.WriteLine("好的,正给您安排。。。。。。。。n");
  67. System.Threading.Thread.Sleep( 5000 );
  68. Console.WriteLine("主人,您的食物在这儿,请慢用");
  69. Console.Read();
  70. }
  71. }
  72.  
  73. /// <summary>
  74. /// 类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood
  75. /// 方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
  76. /// </summary>
  77. public class God
  78. {
  79. public static void Start()
  80. {
  81. Master qinshihuang = new Master();
  82. Servant lishi = new Servant();
  83.  
  84. qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
  85.  
  86. //秦始皇饿了,想去希尔顿大酒店,消费5000元
  87. qinshihuang.Hungry("希尔顿大酒店", 5000.0m);
  88. }
  89. }
  90. }
  91.  
  92.  
  93. //csharp/6796

回复 "一个很现实的例子演示C#的事件机制"

这儿你可以回复上面这条便签

captcha