• 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();
            }
        }
    }
    


  • 相关阅读:
    实验室 Linux 集群的管理常用命令
    python操作MySQL数据库
    python 文件操作总结
    MySQL常用的操作整理
    机器学习模型数据结构:logistic regression, neural network, convolutional neural network
    Python并发编程之线程池/进程池--concurrent.futures模块
    python3.5实现购物车
    Centos上安装python3.5以上版本
    [Python]关于return逻辑判断和短路逻辑
    [Python]返回函数,装饰器拾遗
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720443.html
Copyright © 2020-2023  润新知