• 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);
                    }
                }
            }
        }
    }
  • 相关阅读:
    cordova的安装与配置
    JavaScript-string
    JavaScript-Number
    android-适配器
    网络操作-转码(乱码情况处理)
    网络操作-请求优先级
    Android读取权限
    I/O-<File区别>
    I/O-<File实例>
    I/O-<文件读写、输出>
  • 原文地址:https://www.cnblogs.com/Fred1987/p/11888252.html
Copyright © 2020-2023  润新知