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();
Cooler cooler = new Cooler(); Action<float> del1;
Action<float> del2;
Action<float> del3;
del1 = heater.OnTemperatureChanged;
del2 = cooler.OnTemperatureChanged;
Console.WriteLine("Invoke both delegates:");
del3 = del1+del2; del3();
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(); 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(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();
Cooler cooler = new Cooler(); 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();
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(); 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(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);
}
}
}
}
}
C# delegate multicast single delegate的更多相关文章
- 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...
找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
Delegate的Invoke.BeginInvoke 1.Delegate.Invoke (委托同步调用) a.委托的Invoke方法,在当前线程中执行委托. b.委托执行时阻塞当前线程,知道委托执 ...
- C#Delegate.Invoke、Delegate.BeginInvoke And Control.Invoke、Control.BeginInvoke
作者:EasonLeung 一.Delegate的Invoke.BeginInvoke 1.Delegate.Invoke (委托同步调用) a.委托的Invoke方法,在当前线程中执行委托. b.委 ...
- c# 关键字delegate、event(委托与事件)[MSDN原文摘录][1]
A delegate is a type that safely encapsulates a method, similar to a function pointer in C and C++. ...
- JSBinding + SharpKit / 原理篇:Delegate
以 NGUI 的 UIEventListener 为例: 有一个类: using SharpKit.JavaScript; using UnityEngine; using System.Collec ...
- 【转】iOS 开发之协议protocal-代理传值delegate
原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...
- C#中的委托(Delegate)和事件(Event)
原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...
- C# Note2:委托(delegate) & Lambda表达式 & 事件(event)
前言 本文主要讲述委托和Lambda表达式的基础知识,以及如何通过Lambda表达式实现委托调用,并阐述.NET如何将委托用作实现事件的方式. 参考:C#高级编程 1.什么是委托(delegate)? ...
- Delegate,Action,Func,匿名方法,匿名委托,事件
一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld ...
随机推荐
- C++之重载覆盖和隐藏
继承体系下同名成员函数的三种关系 重载 在同一作用域内 函数名相同,参数列表不同(分三种情况:参数个数不同,参数类型不同,参数个数和类型都不同) 返回值类型可以相同也可以不同 重写(覆盖) 在不同作用 ...
- 如何用css实现太极图
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>太 ...
- Python 十大装 X 语法(一)
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...
- Linux中,Tomcat 怎么承载高并发(深入Tcp参数 backlog)
一.前言 这两天看tomcat,查阅 tomcat 怎么承载高并发时,看到了backlog参数.我们知道,服务器端一般使用mq来减轻高并发下的洪峰冲击,将暂时不能处理的请求放入队列,后续再慢慢处理.其 ...
- Mybatis中返回Map
在Mybatis中,我们通常会像下边这样用: 返回一个结果 User selectOne(User user); <select id="selectOne" paramet ...
- ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就 ...
- Eclipse 的快捷键
1. 代码折叠的快捷键,默认是: Ctrl+Shift+Numpad_Divede(小键盘的/号) Ctrl+Shift+Numpad_Multiply(小键盘的*号) 2.删除一行:Ctrl+D 3 ...
- 安全意识第八期丨OMG!发个帖子竟然摊上大事了
互联网时代,话在网上说.钱在网上花.事在网上办,这早已成为一种习惯,越来越多的人也倾向于通过网络来获取信息. 借助现代信息技术,网络传播者通过即时通讯工具.微博.朋友圈等渠道发布信息,虽然传播起来更便 ...
- LeetCode刷题191118
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 算法: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按 ...
- nginx 七层负载均衡
[tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...