【C# 进阶】事件!直接上事件!
http://www.tracefact.net/csharp-programming/delegates-and-events-in-csharp.aspx
ZiYang 张,何许人也?看了他写的博客,基本看明白了,就有一句不明白,不过以后再慢慢明白~
事件,卡住了多少英雄好汉向C#继续深入?
对委托的封装!弄清
谁发布消息?
谁订阅消息?消息里传递什么信息给观察者?
收到消息要干哈?
不说他提到的水壶例子了。我想了一个模型,不知道能否实现。
我们的微软客户小吴发布测试的任务消息,我们的测试小队长超超订阅这个消息,背后的大boss小马也订阅这个消息。
小队长超超接收消息后,会向他的队友——我们,发布这个消息,让我们开始干活~
二级事件。。。我觉得是,不过我没写过。我们订阅超超的有任务消息,我们收到该消息,会开始做该任务。
大Boss小马收到该消息,会回复一声,我知道了,测试小队做了这个任务呀~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace VenderTest
{
class Program
{
static void Main(string[] args)
{
Customer vsCustomer = new Customer(); vsCustomer.Name = "Wu";
vsCustomer.SentTasks += (new TeamLead() { Name = "Chao" }).ForwardCustomerTask;
vsCustomer.SentTasks += (new Boss() { Name = "Ma" }).ReplyTeamTask;
vsCustomer.MakeTestPlan(, ); }
}
public abstract class Person
{
public string Name { get; set; }
public virtual void Introduction()
{
Console.WriteLine("Hello, my name is {0}", Name);
}
}
public class Customer : Person
{
private string TaskName;
public delegate void SendTaskEventHandler(Object sender, SendTaskEventArgs e);
public event SendTaskEventHandler SentTasks;
public class SendTaskEventArgs : EventArgs
{
public readonly string taskMessage;
public readonly DateTime ETA;
public SendTaskEventArgs(string task, DateTime deadline)
{
this.taskMessage = task;
this.ETA = deadline;
}
}
public virtual void OnSentTasks(SendTaskEventArgs e)
{
SentTasks?.Invoke(this, e);
}
/// <summary>
///
/// </summary>
/// <param name="TaskCount"></param>
/// <param name="TaskInterval">Unit: Days</param>
public void MakeTestPlan(int TaskCount, int TaskInterval)
{
Introduction();
Console.WriteLine("I'm making test plans.");
Console.WriteLine();
for (int i = ; i <= TaskCount; i++)
{
TaskName = "Testing Gallery:" + i.ToString();
DateTime dl = DateTime.Now.AddDays(i * TaskInterval);
SendTaskEventArgs args = new SendTaskEventArgs(TaskName, dl);
OnSentTasks(args);
} }
public override void Introduction()
{
Console.WriteLine("Hello, I'm a vendor customer. My name is {0}", Name); }
}
public class TeamLead :Person
{
public override void Introduction()
{
Console.WriteLine("Hello, I'm a vendor test lead. My name is {0}", Name);
}
public void ForwardCustomerTask(Object sender, Customer.SendTaskEventArgs e)
{
Introduction();
Customer customer = (Customer)sender;
Console.WriteLine("Got a task from the customer: {0}", customer.Name);
//Get information from the event message.
Console.WriteLine("The task name is {0}", e.taskMessage);
Console.WriteLine("The task deadline is {0}", e.ETA);
Console.WriteLine(); }
}
public class Boss:Person
{
private static List<string> tasks = new List<string>();
public override void Introduction()
{
Console.WriteLine("Hello, I'm the manager of vendor team. My name is {0}", Name);
}
public void ReplyTeamTask(Object sender,Customer.SendTaskEventArgs e)
{
Introduction();
Customer customer = (Customer)sender;
Console.WriteLine("OK, {0}. Let's review what they got recently:", customer.Name);
tasks.Add(e.taskMessage);
foreach(var task in tasks)
{
Console.WriteLine(task);
}
Console.WriteLine("Vendors did a lot of tasks. Consider cut some tasks next month.");
Console.WriteLine(); }
} }
【C# 进阶】事件!直接上事件!的更多相关文章
- js进阶---12-12、jquery事件委托怎么使用
js进阶---12-12.jquery事件委托怎么使用 一.总结 一句话总结:通过on方法(事件委托),给要绑定事件的元素的祖先绑定事件,从而达到效果. 1.事件委托是什么? 通过事件冒泡,让子元素绑 ...
- js进阶 12-14 jquery的事件触发函数是哪两个
js进阶 12-14 jquery的事件触发函数是哪两个 一.总结 一句话总结:trigger和triggerHandler 1.trigger传额外参数时候的注意事项是什么? 注意样例中是三个参数 ...
- js进阶 12-4 jquery键盘事件如何使用
js进阶 12-4 jquery键盘事件如何使用 一.总结 一句话总结:键盘和鼠标都是外设输入设备,所以函数很像,所以使用就像鼠标事件click一样 1.jquery键盘事件有哪三个? 1(up和do ...
- js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获
js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获 一.总结 一句话总结:他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件 ...
- 5、JavaScript进阶篇②——函数、事件、内置对象
一.函数 1. 什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; a ...
- [iOS UI进阶 - 3.1] 触摸事件的传递
A.事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发 ...
- js实现Mac触摸板双指事件(上、下、左、右、放大、缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
前言 这几天在修复一个web问题时,需要捕获Mac触摸板双指事件(上.下.左.右.放大.缩小),但发现并没有现成的轮子,还是要自己造. 例如:jquery.mousewheel.js(添加跨浏览器的鼠 ...
- JavaScript进阶系列07,鼠标事件
鼠标事件有Keydown, Keyup, Keypress,但Keypress与Keydown和Keyup不同,如果按ctrl, shift, caps lock......等修饰键,不会触发Keyp ...
- Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...
随机推荐
- Fzu2124 - 吃豆人 BFS
Description 吃豆人是一款非常经典的游戏,游戏中玩家控制吃豆人在地图上吃光所有豆子,并且避免被怪物抓住. 这道题没有怪物,将游戏的画面分成n*m的格子,每格地形可能为空地或者障碍物,吃豆人可 ...
- 转载:Android自动化测试- 自动获取短信验证码
前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android ...
- Webpack 入门指迷--转载(题叶)
最近看到这个东西,一头雾水.看了一些资料了解了Webpack概念,大体是webpack 是一个模块绑定器,主要目的是在浏览器上绑定 JavaScript 文件. 看到题叶写的一篇介绍,写的很好,转载连 ...
- VS2010 OpenCV 2.4.6 配置 (Win7 32位)
1.下载安装OpenCV 下载OpenCV-2.4.6.0 (文件大小 291M),下载地址如下,下载完成后解压缩到路径%OpenCV%下,本文%OpenCV%=E:\图像处理与计算机视觉. http ...
- NOI 题库 7624
7624 山区建小学 描述 政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为di(为正整数),其中, ...
- AFNetworking3.1.0检查网络状态
我们知道AFNetworking3.0版本中,弃用了AFHTTPRequestOperationManager.那么进行网络判断的时候就需要使用 AFNetworkReachabilityManage ...
- Spring中scope作用域
scope作用域: 1.prototype 2.request 3.session 4.singleton 5.global session 1.prototype(多例) prototyp ...
- Unity3D设计原则
原则1:单一职责 原则2:里氏替换原则(子类扩展但不改变父类功能) 原则3:依赖倒置原则 原则4:接口隔离原则 原则5:迪米特法则(最少知道原则) 原则6:开闭原则 原则1:单一职责原则 说到单一职责 ...
- nginx域名隐性(地址栏域名不变)跳转
1.完全url的域名隐性跳转 server_name a.b.com location / { proxy_pass http://x.y.com; } 效果:浏览器地址栏中输入a.b.com域名不变 ...
- Dom4jUtils.java
package com.vcredit.framework.utils; import org.apache.commons.lang3.StringUtils;import org.dom4j.Do ...