delegate

event & delegate Demo(事件&委托示例)

*爱你&永不变心* 提交于 2019-11-26 17:28:26
1 using System; 2 using System.ComponentModel; 3 using System.Windows.Forms; 4 5 namespace WindowsFormsApplication1 6 { 7 public partial class Form1 : Form 8 { 9 public delegate void ActionEventHandler( object sender, ActionCancelEventArgs ev); // 声明一个delegate 10 public static event ActionEventHandler Action; // 声明一个名为Action的事件 11 12 string _time = "" ; 13 14 public Form1() 15 { 16 InitializeComponent(); 17 Form1.Action += new ActionEventHandler(Form1_Action); // 为事件Action增加处理程序(即通过ActionEventHandler这个delegate来调用Form1_Action) 18 } 19 20 private void Form1_Action( object sender,

C#中的委托和事件(续)

梦想的初衷 提交于 2019-11-26 15:03:54
转自: http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-Advanced.aspx C#中的委托和事件(续) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点, 事件应该由事件发布者触发,而不应该由客户端(客户程序)来触发。 这句话是什么意思呢?请看下面的范例: NOTE: 注意这里术语的变化,当我们单独谈论事件,我们说发布者(publisher)、订阅者(subscriber)、客户端(client)。当我们讨论Observer模式,我们说主题(subject)和观察者(observer)。客户端通常是包含Main()方法的Program类。 class Program { static void Main( string [] args) { Publishser pub = new

C# 中的委托和事件(转)

末鹿安然 提交于 2019-11-26 15:03:52
一篇讲解委托和事件的文章,感觉非常不错,不敢独享,转载出来,希望能给初学者以帮助。 转自 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。 将方法作为方法的参数 我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语: public void GreetPeople( string name) { // 做某些额外的事情,比如初始化之类,此处略 EnglishGreeting(name); } public void EnglishGreeting( string name) { Console .WriteLine(

皮特的故事

喜欢而已 提交于 2019-11-26 15:03:02
以前收集整理的關於接口、委託、事件、回調的介紹,採用講故事的方式講解,簡明扼要。 C#:皮特的故事 从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“typed reference” 也就是delegate??)“回调”他的老板来实现他的承诺,如下: namespace皮特的故事_原始版 { class Worker { //声明老板变量 private Boss _boss; //通知老板 public void Advise(Boss boss) { //给老板变量赋值 _boss = boss; } //工人干活 public void DoWork() { Console.WriteLine("工人报告工作进度: 工作开始"); //如果老板有在,通知老板,并得到老板的反应 if (_boss != null) _boss.WorkStarted(); Console.WriteLine("工人报告工作进度: 工作进行中"); //如果老板有在,通知老板,并得到老板的反应 if (

c# 移除类中所有事件的绑定

北战南征 提交于 2019-11-26 14:42:05
原文: c# 移除类中所有事件的绑定 单例中为防止多处注册事件引起异步触发时发生报错,网上找了一圈没找到想要的方法。 【异常类型】:ArgumentException 【异常信息】:该委托必须有一个目标(且仅有一个目标)。 结合网上资料整合了个方法 /// <summary> /// 移除所有注册事件 /// </summary> public void RemoveAllEvent() { var newType = this.GetType(); foreach (var item in newType.GetEvents()) { FieldInfo _Field = newType.GetField(item.Name, BindingFlags.Instance | BindingFlags.NonPublic); if (_Field != null) { object _FieldValue = _Field.GetValue(this); if (_FieldValue != null && _FieldValue is Delegate) { Delegate _ObjectDelegate = (Delegate)_FieldValue; Delegate[] invokeList = _ObjectDelegate.GetInvocationList();

c# 移除类中所有事件的绑定

有些话、适合烂在心里 提交于 2019-11-26 12:51:50
单例中为防止多处注册事件引起异步触发时发生报错,网上找了一圈没找到想要的方法。 【异常类型】:ArgumentException 【异常信息】:该委托必须有一个目标(且仅有一个目标)。 结合网上资料整合了个方法 /// <summary> /// 移除所有注册事件 /// </summary> public void RemoveAllEvent() { var newType = this.GetType(); foreach (var item in newType.GetEvents()) { FieldInfo _Field = newType.GetField(item.Name, BindingFlags.Instance | BindingFlags.NonPublic); if (_Field != null) { object _FieldValue = _Field.GetValue(this); if (_FieldValue != null && _FieldValue is Delegate) { Delegate _ObjectDelegate = (Delegate)_FieldValue; Delegate[] invokeList = _ObjectDelegate.GetInvocationList(); if (invokeList !=

《提升能力,涨薪可待》-易理解的@SpringBootApplication注解源码解析

痞子三分冷 提交于 2019-11-26 09:23:52
欢迎一起学习 提升能力,涨薪可待 面试知识,工作可待 实战演练,拒绝996 如果此文对你有帮助、喜欢的话,那就点个赞呗! 前言 是不是感觉在工作上难于晋升了呢? 是不是感觉找工作面试是那么难呢? 是不是感觉自己每天都在996加班呢? 在工作上必须保持学习的能力,这样才能在工作得到更好的晋升,涨薪指日可待,欢迎一起学习【 提升能力,涨薪可待 】系列 在找工作面试应在学习的基础进行总结面试知识点,工作也指日可待,欢迎一起学习【 面试知识,工作可待 】系列 最后,理论知识到准备充足,是不是该躬行起来呢?欢迎一起学习【 实战演练,拒绝996 】系列 springApplication 一、 @SpringBootApplication 的作用是什么? ​ Q:springboot项目的启动类上,都会有个注解 @SpringBootApplication ,这个注解起到了什么作用? @SpringBootApplication public class MicroServiceApplication { public static void main(String[] args) { SpringApplication.run(MicroServiceApplication.class, args); } } ​ 我们进入 @SpringBootApplication 注解,发现它

c# 匿名委托

旧城冷巷雨未停 提交于 2019-11-25 19:21:49
using System; namespace AnonymousMethod { delegate void ArithmeticOperation(double operand1, double operand2); class Program { static void Main(string[] args) { ArithmeticOperation sum = delegate (double number1, double number2) { Console.WriteLine($"{number1} + {number2} = {number1 + number2}"); }; sum(10, 5); Console.WriteLine(); } } } 参考: https://itnext.io/delegates-anonymous-methods-and-lambda-expressions-5ea4e56bbd05 来源: https://www.cnblogs.com/wolbo/p/11313409.html