http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx

ZiYang 张,何许人也?看了他写的博客,基本看明白了,就有一句不明白,不过以后再慢慢明白~

事件,卡住了多少英雄好汉向C#继续深入?

对委托的封装!弄清

谁发布消息?

谁订阅消息?消息里传递什么信息给观察者?

收到消息要干哈?

不说他提到的水壶例子了。我想了一个模型,不知道能否实现。

我们的微软客户小吴发布测试的任务消息,我们的测试小队长超超订阅这个消息,背后的大boss小马也订阅这个消息。

小队长超超接收消息后,会向他的队友——我们,发布这个消息,让我们开始干活~

  二级事件。。。我觉得是,不过我没写过。我们订阅超超的有任务消息,我们收到该消息,会开始做该任务。

大Boss小马收到该消息,会回复一声,我知道了,测试小队做了这个任务呀~

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace VenderTest
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Customer vsCustomer = new Customer();
  14.  
  15. vsCustomer.Name = "Wu";
  16. vsCustomer.SentTasks += (new TeamLead() { Name = "Chao" }).ForwardCustomerTask;
  17. vsCustomer.SentTasks += (new Boss() { Name = "Ma" }).ReplyTeamTask;
  18. vsCustomer.MakeTestPlan(, );
  19.  
  20. }
  21. }
  22. public abstract class Person
  23. {
  24. public string Name { get; set; }
  25. public virtual void Introduction()
  26. {
  27. Console.WriteLine("Hello, my name is {0}", Name);
  28. }
  29. }
  30. public class Customer : Person
  31. {
  32. private string TaskName;
  33. public delegate void SendTaskEventHandler(Object sender, SendTaskEventArgs e);
  34. public event SendTaskEventHandler SentTasks;
  35. public class SendTaskEventArgs : EventArgs
  36. {
  37. public readonly string taskMessage;
  38. public readonly DateTime ETA;
  39. public SendTaskEventArgs(string task, DateTime deadline)
  40. {
  41. this.taskMessage = task;
  42. this.ETA = deadline;
  43. }
  44. }
  45. public virtual void OnSentTasks(SendTaskEventArgs e)
  46. {
  47. SentTasks?.Invoke(this, e);
  48. }
  49. /// <summary>
  50. ///
  51. /// </summary>
  52. /// <param name="TaskCount"></param>
  53. /// <param name="TaskInterval">Unit: Days</param>
  54. public void MakeTestPlan(int TaskCount, int TaskInterval)
  55. {
  56. Introduction();
  57. Console.WriteLine("I'm making test plans.");
  58. Console.WriteLine();
  59. for (int i = ; i <= TaskCount; i++)
  60. {
  61. TaskName = "Testing Gallery:" + i.ToString();
  62. DateTime dl = DateTime.Now.AddDays(i * TaskInterval);
  63. SendTaskEventArgs args = new SendTaskEventArgs(TaskName, dl);
  64. OnSentTasks(args);
  65. }
  66.  
  67. }
  68. public override void Introduction()
  69. {
  70. Console.WriteLine("Hello, I'm a vendor customer. My name is {0}", Name);
  71.  
  72. }
  73. }
  74. public class TeamLead :Person
  75. {
  76. public override void Introduction()
  77. {
  78. Console.WriteLine("Hello, I'm a vendor test lead. My name is {0}", Name);
  79. }
  80. public void ForwardCustomerTask(Object sender, Customer.SendTaskEventArgs e)
  81. {
  82. Introduction();
  83. Customer customer = (Customer)sender;
  84. Console.WriteLine("Got a task from the customer: {0}", customer.Name);
  85. //Get information from the event message.
  86. Console.WriteLine("The task name is {0}", e.taskMessage);
  87. Console.WriteLine("The task deadline is {0}", e.ETA);
  88. Console.WriteLine();
  89.  
  90. }
  91. }
  92. public class Boss:Person
  93. {
  94. private static List<string> tasks = new List<string>();
  95. public override void Introduction()
  96. {
  97. Console.WriteLine("Hello, I'm the manager of vendor team. My name is {0}", Name);
  98. }
  99. public void ReplyTeamTask(Object sender,Customer.SendTaskEventArgs e)
  100. {
  101. Introduction();
  102. Customer customer = (Customer)sender;
  103. Console.WriteLine("OK, {0}. Let's review what they got recently:", customer.Name);
  104. tasks.Add(e.taskMessage);
  105. foreach(var task in tasks)
  106. {
  107. Console.WriteLine(task);
  108. }
  109. Console.WriteLine("Vendors did a lot of tasks. Consider cut some tasks next month.");
  110. Console.WriteLine();
  111.  
  112. }
  113. }
  114.  
  115. }

【C# 进阶】事件!直接上事件!的更多相关文章

  1. js进阶---12-12、jquery事件委托怎么使用

    js进阶---12-12.jquery事件委托怎么使用 一.总结 一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果. 1.事件委托是什么? 通过事件冒泡,让子元素绑 ...

  2. js进阶 12-14 jquery的事件触发函数是哪两个

    js进阶 12-14 jquery的事件触发函数是哪两个 一.总结 一句话总结:trigger和triggerHandler 1.trigger传额外参数时候的注意事项是什么? 注意样例中是三个参数 ...

  3. js进阶 12-4 jquery键盘事件如何使用

    js进阶 12-4 jquery键盘事件如何使用 一.总结 一句话总结:键盘和鼠标都是外设输入设备,所以函数很像,所以使用就像鼠标事件click一样 1.jquery键盘事件有哪三个? 1(up和do ...

  4. js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获

    js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获 一.总结 一句话总结:他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件 ...

  5. 5、JavaScript进阶篇②——函数、事件、内置对象

    一.函数 1. 什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; a ...

  6. [iOS UI进阶 - 3.1] 触摸事件的传递

    A.事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发 ...

  7. js实现Mac触摸板双指事件(上、下、左、右、放大、缩小)

    前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...

  8. js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)

    前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...

  9. JavaScript进阶系列07,鼠标事件

    鼠标事件有Keydown, Keyup, Keypress,但Keypress与Keydown和Keyup不同,如果按ctrl, shift, caps lock......等修饰键,不会触发Keyp ...

  10. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...

随机推荐

  1. 分享一下自己用c++写的小地图

    http://www.unrealchina.com/forum.php?mod=viewthread&tid=451&extra=&from=portal&page= ...

  2. JavaScript中的this指向

    this是谁 技术一般水平有限,有什么错的地方,望大家指正. this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学 ...

  3. T-SQL Recipes之生成动态列表数据

    Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...

  4. H5开发中的问题总结

    最近公司做了一个出行日记的项目,里面的页面十多页,天天加班,做到吐血.总体来说,写页面的时候虽然是十多个页面,其实难度还是在每个页面的特效上.公司是易到用车,出行日记的页面在APP里有生成入口,有兴趣 ...

  5. ZeroMQ接口函数之 :zmq_msg_init_size - 使用一个指定的空间大小初始化ZMQ消息对象

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_size zmq_msg_init_size(3) ØMQ Manual - ØMQ/3.2.5 ...

  6. info.plist、pch和四大对象(UIApplication、UIApplicationDelegate、UIWindow、UIViewController)

    本文目录 1.程序配置文件info.plist,全局头文件pch 2.应用程序对象UIApplication介绍 3.UIApplicationDelegate介绍,程序启动过程 4.UIWindow ...

  7. Java Gson 简要笔记

    Gson是Google开发的Java比较好用的 Json工具. 使用挺简单,假设有个类: class Runner { int attr; String name; public Runner(int ...

  8. F-并查集

    Problem F Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 60000/30000K (Java/Other) Total Sub ...

  9. 使用R语言-RStudio快捷键

    控制台 功能 Windows & Linux Mac 移动鼠标到控制台 Ctrl+2 Ctrl+2 控制台清屏 Ctrl+L Command+L 移动鼠标至第一行 Home Command+L ...

  10. Java Service Wrapper简介与使用

    在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护,但是一旦服务器重启或出现异常时,程序往往无法自行修复或重启.解 ...