• 【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(5, 2);
    
            }
        }
        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 = 1; 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();
    
            }
        }
    
    }
  • 相关阅读:
    实验三 进程调度模拟程序
    实验二作业调度模拟程序
    最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来
    最后冲刺 我的项目 广商小助手
    最新一课 老师指点用Listview适配器
    安卓小学生四则运算
    大三上学期安卓一边学一边开始做一个自己觉得可以的项目 广商小助手App 加油
    我要再接再力 学更多
    用场景来规划测试工作
    阅读第13,14,15,16,17章
  • 原文地址:https://www.cnblogs.com/jin-wen-xin/p/6116388.html
Copyright © 2020-2023  润新知