zoukankan      html  css  js  c++  java
  • C# delegate multicast single delegate

    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp386
    {
        class Program
        {
            static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
                
                Action<float> del1;
                Action<float> del2;
                Action<float> del3;
                del1 = heater.OnTemperatureChanged;
                del2 = cooler.OnTemperatureChanged;
                Console.WriteLine("Invoke both delegates:");
                del3 = del1+del2;
                 
                del3(90);
                Console.WriteLine("Multicast delegates:");
                foreach(var dl in del3.GetInvocationList())
                {
                    Console.WriteLine($"Target:{dl.Target},Method:{dl.Method}"); 
                }
    
               
                Console.WriteLine();
                Console.WriteLine("Invoke only del2:");
                del3 = del3 - del1;
                del3(30);
    
                Console.WriteLine("
    Single delegate:");
                foreach (var dl in del3.GetInvocationList())
                {
                    Console.WriteLine($"Target:{dl.Target},Method:{dl.Method}");
                }
    
                Console.ReadLine();
            }
        }
    
        class Cooler
        {         
            public float Temperature
            {
                get;set;
            }
            public Cooler(float temperature)
            {
                Temperature = temperature;
            }
    
            public void OnTemperatureChanged(float newTemperature)
            {
                if(newTemperature>Temperature)
                {
                    Console.WriteLine("Cooloer:On");
                }
                else
                {
                    Console.WriteLine("Cooler:Off");
                }
            }         
        }
    
        class Heater
        {        
            public float Temperature
            {
                get;set;
            }
            public Heater(float temperature)
            {
                Temperature = temperature;
            }
    
            public void OnTemperatureChanged(float newTemperature)
            {
                if(newTemperature<Temperature)
                {
                    Console.WriteLine("Heater:On");
                }
                else
                {
                    Console.WriteLine("Heater:Off");
                }
            }
        }
    
        public class Thermostat
        {
            //Define the event publisher
            public Action<float> OnTemperatureChange { get; set; }
    
            private float currentTemperatureValue;
            public float CurrentTemperature
            {
                get
                {
                    return currentTemperatureValue;
                }
                set
                {
                    if(value!=currentTemperatureValue)
                    {
                        currentTemperatureValue = value;
                        OnTemperatureChange?.Invoke(value);
                    }
                }
            }
        }
    }
    
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp386
    {
        class Program
        {
            static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
                
                Action<float> del1;
                Action<float> del2;
                Action<float> del3;
                del1 = heater.OnTemperatureChanged;
                del2 = cooler.OnTemperatureChanged;
                Console.WriteLine("Invoke both delegates:");
                del3 = del1;
                del3 += del2;
                del3(90);
                Console.WriteLine("Multicast delegates:");
                foreach(var dl in del3.GetInvocationList())
                {
                    Console.WriteLine($"Target:{dl.Target},Method:{dl.Method}"); 
                }
                Console.WriteLine();
                Console.WriteLine("Invoke only del2:");
                del3 -= del1;
                del3(30);
    
                Console.WriteLine("
    Single delegate:");
                foreach (var dl in del3.GetInvocationList())
                {
                    Console.WriteLine($"Target:{dl.Target},Method:{dl.Method}");
                }
                Console.ReadLine();
            }
        }
    
        class Cooler
        {         
            public float Temperature
            {
                get;set;
            }
            public Cooler(float temperature)
            {
                Temperature = temperature;
            }
    
            public void OnTemperatureChanged(float newTemperature)
            {
                if(newTemperature>Temperature)
                {
                    Console.WriteLine("Cooloer:On");
                }
                else
                {
                    Console.WriteLine("Cooler:Off");
                }
            }         
        }
    
        class Heater
        {        
            public float Temperature
            {
                get;set;
            }
            public Heater(float temperature)
            {
                Temperature = temperature;
            }
    
            public void OnTemperatureChanged(float newTemperature)
            {
                if(newTemperature<Temperature)
                {
                    Console.WriteLine("Heater:On");
                }
                else
                {
                    Console.WriteLine("Heater:Off");
                }
            }
        }
    
        public class Thermostat
        {
            //Define the event publisher
            public Action<float> OnTemperatureChange { get; set; }
    
            private float currentTemperatureValue;
            public float CurrentTemperature
            {
                get
                {
                    return currentTemperatureValue;
                }
                set
                {
                    if(value!=currentTemperatureValue)
                    {
                        currentTemperatureValue = value;
                        OnTemperatureChange?.Invoke(value);
                    }
                }
            }
        }
    }
  • 相关阅读:
    Java中如何动态创建接口的实现
    使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务
    MyBatis中的@Mapper注解及配套注解使用详解(上)
    SpringMVC-DispatcherServlet工作流程及web.xml配置
    SpringMVC-DispatcherServlet配置(Spring-servlet.xml)
    Spring MVC 配置文件dispatcher-servlet.xml 文件详解
    python3 UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position 30: illegal multibyte sequence
    python3之日期和时间(转载)
    python3 操作sqlSever
    python 抓取alexa数据
  • 原文地址:https://www.cnblogs.com/Fred1987/p/11888252.html
Copyright © 2011-2022 走看看