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