zoukankan      html  css  js  c++  java
  • C#_delegate

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace EventClock
    {
    
        public class ClassWithDelegate
        { 
            //封装了一个返回值为int的多重委托方法
            public delegate int DelegateThatReturns();
    
            public event DelegateThatReturns theDelegate;
    
            public void Run()
            {
                for (; ; )
                {
                    Thread.Sleep(500);
    
                    if (theDelegate != null)
                    {
                        //显式调用每个委托方法
                        foreach (DelegateThatReturns del in theDelegate.GetInvocationList())
                        {
                            //异步调用
                            //传入委托作为一个状态对象
                            del.BeginInvoke(new AsyncCallback(ResultReturns), del);
                           
                        }
                        Console.WriteLine();
                    }
                }
            }
            //获取结果的回调方法
            public void ResultReturns(IAsyncResult iar)
            {
                //将状态对象转换为委托类型
                DelegateThatReturns del = (DelegateThatReturns)iar.AsyncState;
                //调用委托的EndInvoke方法获取结果
                int result = del.EndInvoke(iar);
                //显示结果
                Console.WriteLine("Delegate returned result: {0}",result);
            }
        }
    
        public class FirstSubscribe
        {
            private int myCounter = 0;
    
            public void Subscribe(ClassWithDelegate theClassWithDelegate)
            {
                theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(DisplayCounter);
            }
    
            public int DisplayCounter()
            {
                Console.WriteLine("Busy in displaying............");
                Thread.Sleep(10000);
                Console.WriteLine("Do not with work in display............");
                return ++myCounter;
            }
        }
        public class SecondSubscribe
        {
            private int myCounter = 0;
    
            public void Subscribe(ClassWithDelegate theClassWithDelegate)
            {
                theClassWithDelegate.theDelegate += new ClassWithDelegate.DelegateThatReturns(Doubler);
            }
    
            public int Doubler()
            {
                return myCounter += 2;
            }
        }
    
    
        
    
        class Program
        {
            static void Main(string[] args)
            {
                ClassWithDelegate theClassWithDelegate = new ClassWithDelegate();
    
                FirstSubscribe fs = new FirstSubscribe();
                fs.Subscribe(theClassWithDelegate);
    
                SecondSubscribe ss = new SecondSubscribe();
                ss.Subscribe(theClassWithDelegate);
    
                theClassWithDelegate.Run();
                
                Console.ReadLine();
            }
        }
    }
    


  • 相关阅读:
    springboot 的一般配置
    springmvc 中将MultipartFile转为file,springboot 注入CommonsMultipartResolver
    .OPF文件剖析
    Epub格式的电子书——文件组成
    解决js代码中加入alert()就成功执行,不加就不对的问题!
    java编程之POI读取excel表格的内容
    MyBatis之一对多映射查询sql配置文件。
    springMVC的拦截器
    SpringMvc的上传和下载
    SpringMVC传递数据的流线图
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720443.html
Copyright © 2011-2022 走看看