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

     class Program
        {
            static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
    
                string temperature;
                thermostat.OnTemperatureChange += heater.OnTemperatureChanged;
                thermostat.OnTemperatureChange += cooler.OnTemperatureChanged;
                Console.WriteLine("Enter temperature: ");
                temperature = Console.ReadLine();
                if(int.TryParse(temperature,out int result))
                {
                    thermostat.CurrentTemperature = result;
                }           
                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("Cooler: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(value);
                    }
                }
            }
        }
    

      

     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);
                    }
                }
            }
        }
     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;
                        Action<float> localOnChange = OnTemperatureChange;
                        if(localOnChange!=null)
                        {
                            localOnChange(value);
                        }
                    }
                }
            }
        }
    static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
    
                Action<float> del1, del2, del3;
                del1 = heater.OnTemperatureChanged;
                del2 = cooler.OnTemperatureChanged;
                Console.WriteLine("Invoke both delegates:");
                del3 = del1;
                del3 += del2;
                del3(90);
    
                Console.WriteLine("Invoke only del2:");
                del3 -= del2;
                del3(30);
                Console.ReadLine();
            }
    static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
    
                Action<float> del1, del2, del3;
                del1 = heater.OnTemperatureChanged;
                del2 = cooler.OnTemperatureChanged;
    
                Console.WriteLine("Combine delegates using + operator");
                del3 = del1 + del2;
                del3(60);
    
                Console.WriteLine("UnCombine delegates using - operator!");
                del3 = del3 - del2;
                del3(30);
                Console.ReadLine();
            }
     static void Main(string[] args)
            {
                Thermostat thermostat = new Thermostat();
                Heater heater = new Heater(60);
                Cooler cooler = new Cooler(80);
    
                thermostat.OnTemperatureChange += heater.OnTemperatureChanged;
    
                thermostat.OnTemperatureChange += (newTemperature) =>
                {
                    throw new InvalidOperationException();
                };
    
                thermostat.OnTemperatureChange += cooler.OnTemperatureChanged;
                Console.WriteLine("Enter temperature: ");
                string temperature = Console.ReadLine();
                if(int.TryParse(temperature,out int temp))
                {
                    thermostat.CurrentTemperature = temp;
                }
    
                Console.ReadLine();
            }
    private float currentTemperatureValue;
            public float CurrentTemperature
            {
                get
                {
                    return currentTemperatureValue;
                }
                set
                {
                    if(value!=currentTemperatureValue)
                    {
                        currentTemperatureValue = value;
                        Action<float> localOnChange = OnTemperatureChange;
                        if(localOnChange!=null)
                        {
                            List<Exception> exceptionCollection = new List<Exception>();
                            foreach(Action<float> handler in OnTemperatureChange.GetInvocationList())
                            {
                                try
                                {
                                    handler(value);
                                }
                                catch(Exception ex)
                                {
                                    exceptionCollection.Add(ex);
                                }
                            }
    
                            if(exceptionCollection.Count>0)
                            {
                                throw new AggregateException("There were exceptions throw OnTemperatureChange Event subscribers.", exceptionCollection);
                            }
                        }
                    }
                }
            }
  • 相关阅读:
    事件(五):事件委托
    事件(四):事件类型
    【[ZJOI2005]午餐】
    【[POI2006]OKR-Periods of Words】
    【2^k进制数】
    【[SHOI2015]脑洞治疗仪】
    【[NOI2016]区间】
    【[SHOI2014]概率充电器】
    【逛公园】
    【[CQOI2014]数三角形】
  • 原文地址:https://www.cnblogs.com/Fred1987/p/11900480.html
Copyright © 2011-2022 走看看