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);
                    }
                }
            }
        }
    }
  • 相关阅读:
    文件上传和多线程通信
    黏包
    socket通信
    osi七层协议
    面向对象的反射和双下方法
    类的成员和异常处理
    python面向对象类的约束和设计的统一化规范
    单继承和多继承
    对象
    Python-----带参数的装饰器以及补充
  • 原文地址:https://www.cnblogs.com/Fred1987/p/11888252.html
Copyright © 2011-2022 走看看