很久没上来写点东西了,今天把N年前的代码看了一遍。随手写了点寄托哀思--多播委托
using System;
//委托类似于C++中的函数指针,不同的是委托可以包含一个顺序的委托集合。
//在C#类型封装中,对于不同类型的单个函数的暴露建议使用委托而不要使用接口。
//委托在对象交互的过程中可以进行函数或函数集合的传递。
//下面将演示一个多播委托的简单例子。
namespace 多播委托
{
public delegate void 委托演示();
class Program
{
static void Main(string[] args)
{
//这里产生2个演示对象
工作者 演示对象1 = new 工作者();
管理者 演示对象2 = new 管理者();
//工作者向管理者汇报工作成果
演示对象1.开始工作(演示对象2.开始管理());
}
}
/// <summary>
/// 从管理者那里得到具体的工作内容和顺序进行工作。
/// </summary>
class 工作者
{
public 工作者()
{
}
public void 开始工作(委托演示 委托对象)
{
委托对象();
Console.ReadLine();
}
}
/// <summary>
/// 管理者通过已经确定的工作内容去制定工作的流程,并告知工作者.
/// </summary>
class 管理者
{
public 管理者()
{
}
public 委托演示 开始管理()
{
//得到可以开始的工作范围
工作流模块1 工作流对象1 = new 工作流模块1();
工作流模块2 工作流对象2 = new 工作流模块2();
//首先确定要干哪些事
委托演示 委托演示对象1 = new 委托演示(工作流对象1.流程1);
委托演示 委托演示对象2 = new 委托演示(工作流对象1.流程2);
委托演示 委托演示对象3 = new 委托演示(工作流对象1.流程3);
委托演示 委托演示对象4 = new 委托演示(工作流对象2.流程1);
委托演示 委托演示对象5 = new 委托演示(工作流对象2.流程2);
委托演示 委托演示对象6 = new 委托演示(工作流对象2.流程3);
//然后确定工作的顺序
委托演示 委托演示对象7 = 委托演示对象1 + 委托演示对象2 + 委托演示对象3;
委托演示对象7 += 委托演示对象4 + 委托演示对象5 + 委托演示对象6;
return 委托演示对象7;
}
}
class 工作流模块1
{
public void 流程1()
{
Console.WriteLine("开始流程");
}
public void 流程2()
{
Console.WriteLine("模块1流程1");
}
public void 流程3()
{
Console.WriteLine("模块1流程2");
}
}
class 工作流模块2
{
public void 流程1()
{
Console.WriteLine("模块2流程1");
}
public void 流程2()
{
Console.WriteLine("模块2流程2");
}
public void 流程3()
{
Console.WriteLine("结束流程");
}
}
}