C# delegate multicast single delegate
2021-01-28 15:15
标签:var private off linq using multicast eric collect oid C# delegate multicast single delegate 标签:var private off linq using multicast eric collect oid 原文地址:https://www.cnblogs.com/Fred1987/p/11888252.htmlusing 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);
Actionfloat> del1;
Actionfloat> del2;
Actionfloat> 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("\nSingle 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(newTemperatureTemperature)
{
Console.WriteLine("Heater:On");
}
else
{
Console.WriteLine("Heater:Off");
}
}
}
public class Thermostat
{
//Define the event publisher
public Actionfloat> 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);
Actionfloat> del1;
Actionfloat> del2;
Actionfloat> 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("\nSingle 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(newTemperatureTemperature)
{
Console.WriteLine("Heater:On");
}
else
{
Console.WriteLine("Heater:Off");
}
}
}
public class Thermostat
{
//Define the event publisher
public Actionfloat> OnTemperatureChange { get; set; }
private float currentTemperatureValue;
public float CurrentTemperature
{
get
{
return currentTemperatureValue;
}
set
{
if(value!=currentTemperatureValue)
{
currentTemperatureValue = value;
OnTemperatureChange?.Invoke(value);
}
}
}
}
}
文章标题:C# delegate multicast single delegate
文章链接:http://soscw.com/index.php/essay/48287.html