很久没上来写点东西了,今天把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(
"结束流程");
        }

    }

}

posted on 2008-04-22 15:49  梁朝伟  阅读(512)  评论(3编辑  收藏  举报

导航