[整理]近段了解一些委托事件的工作原理.找到两个很不错的例子,所以特拿出与大家分享!

C#委托和事件、事件的工作原理 C#委托和事件、事件的工作原理、简单是事件的定义,初步学习事件的使用 立即下载

第一个例子

http://www.akadia.com/services/dotnet_delegates_and_events.html
思归给的委托事件参考站点

public delegate void EatEventHandler(object sender, EatEventArgs e);
这个的定义也可以不要这样.可以直接就定义一个参数
public delegate void EatEventHandler(string e); 但然用的时候的参数要相对应好哦

using System;

namespace nsEventSample
{
    /// <summary>
    /// 类EatEventArgs 必须继承自类EventArgs,用来引发事件时封装数据
    /// </summary>
    public class EatEventArgs : EventArgs
    {
        public String restrauntName;     //饭店名称
        public decimal moneyOut;            //准备消费金额
    }

    /// <summary>
    /// 这个委托用来说明处理吃饭事件的方法的方法头(模式)
    /// </summary>
    public delegate void EatEventHandler(object sender, EatEventArgs e);

    /// <summary>
    /// 引发吃饭事件(EateEvent)的类Master(主人),这个类必须
    /// 1.声明一个名为EatEvent的事件: public event EatEventHandler EatEvent;
    /// 2.通过一个名为OnEatEvent的方法来引发吃饭事件,给那些处理此事件的方法传数据;
    /// 3.说明在某种情形下引发事件呢?在饿的时候。用方法Hungrg来模拟。
    /// </summary>
    public class Master
    {
        //声明事件
        public event EatEventHandler EatEvent;

        //引发事件的方法
        public void OnEatEvent(EatEventArgs e)
        {
            if (EatEvent != null)
            {
                EatEvent(this, e);
            }
        }

        //当主人饿的时候,他会指定吃饭地点和消费金额。
        public void Hungry(String  restrauntName, decimal moneyOut)
        {
            EatEventArgs e = new EatEventArgs();
            e.restrauntName = restrauntName;
            e.moneyOut = moneyOut;

            Console.WriteLine("主人说:");
            Console.WriteLine("我饿了,要去{0}吃饭,消费{1}元", e.restrauntName, e.moneyOut);

            //引发事件
            OnEatEvent(e);
        }
    }

    /// <summary>
    /// 类Servant(仆人)有一个方法ArrangeFood(安排食物)来处理主人的吃饭事件
    /// </summary>
    public class Servant
    {
        public void ArrangeFood(object sender, EatEventArgs e)
        {
            Console.WriteLine();
            Console.WriteLine("仆人说:");
            Console.WriteLine("我的主人, 您的命令是 : ");
            Console.WriteLine("吃饭地点 -- {0}", e.restrauntName);
            Console.WriteLine("准备消费 -- {0}元 ", e.moneyOut);
            Console.WriteLine("好的,正给您安排。。。。。。。。");
            Console.WriteLine("主人,您的食物在这儿,请慢用");
        }
    }

    /// <summary>
    /// 类God安排qinshihuang(秦始皇)的仆人是lisi(李斯),并让李斯的ArrangeFood
    /// 方法来处理qinshihuang的吃饭事件:qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
    /// </summary>
    public class God
    {
        public static void Main()
        {
            Master  qinshihuang = new Master();
            Servant lishi = new Servant();

            qinshihuang.EatEvent += new EatEventHandler(lishi.ArrangeFood);
            
            //秦始皇饿了,想去希尔顿大酒店,消费5000元
            qinshihuang.Hungry("希尔顿大酒店", 5000.0m);
        }
    }
}
 

底二个例子

http://community.youkuaiyun.com/Expert/topic/2651/2651579.xml?temp=.7183191

比如说一个公司(场景),你是老板,手下有两个员工,小张和小李。你命令小张注意小李,在开发软件工作的时候如果上网打游戏,你就记录下来,从小李工资里扣100元钱。这个实际上就是现实中的委托。

现在给出一个代码,C#控制台程序,编译运行通过
using System;

namespace CSharpConsole
{
 public class 场景
 {
  [STAThread]
  public static void Main(string[] args)
  {
   Console.WriteLine("场景开始了....");
   // 生成小王
   小王 w = new 小王();
   // 生成小账
   小张 z = new 小张();

   // 指定监视
   z.PlayGame += new PlayGameHandler(w.扣钱);
   
   // 开始玩游戏
   z.玩游戏();

   Console.WriteLine("场景结束...");
   Console.ReadLine();
  }
 }

 // 负责扣钱的人
 public class 小王
 {
  public 小王()
  {
   Console.WriteLine("生成小王...");
  }

  public void 扣钱(object sender,EventArgs e)
  {
   Console.WriteLine("小王:好小子,上班时间胆敢玩游戏...");
   Console.WriteLine("小王:看看你小子有多少钱...");
   小张 f = (小张)sender;
   Console.WriteLine("小张的钱: " + f.钱.ToString());
   Console.WriteLine("开始扣钱......");
   System.Threading.Thread.Sleep(500);
   f.钱 = f.钱 - 500;
   Console.WriteLine("扣完了....现在小张还剩下:" + f.钱.ToString());
  }
 }

 // 如果玩游戏,则引发事件
 public class 小张
 {
  // 先定义一个事件,这个事件表示“小张”在玩游戏。
  public event PlayGameHandler PlayGame;
  // 保存小张钱的变量
  private int m_Money;

  public 小张()
  {
   Console.WriteLine("生成小张....");
   m_Money = 1000; // 构造函数,初始化小张的钱。
  }

  public int 钱 // 此属性可以操作小张的钱。
  {
   get
   {
    return m_Money;
   }
   set
   {
    m_Money = value;
   }
  }

  public void 玩游戏()
  {
   Console.WriteLine("小张开始玩游戏了.....");
   Console.WriteLine("小张:CS好玩,哈哈哈! 我玩.....");
   System.Threading.Thread.Sleep(500);
   System.EventArgs e = new EventArgs();
   OnPlayGame(e);
  }

  protected virtual void OnPlayGame(EventArgs e)
  {
   if(PlayGame != null)
   {
    PlayGame(this,e);
   }
  }
 }

 // 定义委托处理程序
 public delegate void PlayGameHandler(object sender,System.EventArgs e);
}

相信你看完了后.豁然开朗了吧.HOHO!

S-function入门及案例详解(1)——S-function基础介绍及基本案例 本专题将用三篇文章对S-function进行介绍及其案例详解。欢迎关注~ 目录一、S-Function简介二、详解sfuntmpl函数2.1 sfuntmpl函数介绍2.2 mdlInitializeSizes函数2.3 mdlDerivatives函数2.4 mdlUpdate函数2.5 mdlOutputs函数2.6 mdlGetTimeOfNextVarHit函数2.7 mdlTerminate函数三、案例1——对波形的幅值进行放大3.1 案例分析3.2 案例详解3.3 输出波形四、案例2——对波形的 阅读详情

相关推荐

手把手教程:使用C#实现工业上位机开发

深入讲解如何利用C#进行上位机开发,涵盖通信协议与界面设计,助力掌握工业自动化核心技能。结合实际案例,让上位机开发更高效直观。

weixin_32480007的博客 2064

委派模式的实例介绍

委派模式 委派模式的基本作用就是负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,委派模式注重结果。不属于GOP23种模式之一,属于行为模式。 在我们工作中,最常见的一种情况就是,当我们公司老板想做一个东西,他要找到我们项目经理发送一个命令,然后我们项目经理接受到这个命令的时候,项目经理会根据这个东西来进行对团队里面的员工来分配。所以,我...

一只超级迷茫的猿 676

保姆级教程:在RK3588开发板上配置USB-C PD充电(基于HUSB311芯片与DTS详解)

本文详细介绍了在RK3588开发板上配置USB-C PD充电的完整流程,重点解析了HUSB311芯片的硬件原理与DTS安全配置。通过实战案例和调试技巧,帮助开发者避免常见错误,实现稳定可靠的Type-C PD快充功能,适用于从基础开发板到工业设备的多场景需求。

weixin_42552315的博客 521

委托事件的三个很好的例子

今天在csdn的论坛看到的帖子,写的不错,就贴上来了。http://community.csdn.net/Expert/topic/4093/4093184.xml?temp=.38435两个例子均用现实的例子来解释委托事件的处理过程。很好!  第一个例子public delegate void EatEventHandler(object sender, EatEventArgs e);

动性忍心 2332

fNIRS 公开数据集整理

关注“心仪脑”查看更多脑科学知识的分享。 关键词:数据整理、fNIRS 之前我们向大家推送了 Public Neuroscience Dataset 系列主题的第一期:《EEG公开数据集》,我们同时意识到大家对于神经科学公开数据集的需求。本期是该系列主题的第二期,我们在延续第一期初衷的基础上,整理了功能性近红外光谱(fNIRS)技术的公开数据集。 fNIRS 是一种非侵入性、便携且价格低廉的光学神经成像技术,它具有可观的空间和时间分辨率。因fNIRS技术问世较EEG晚了许多,所以应用此技术开展研究发.

psybrain的博客 4271

【雕爷学编程】MicroPython手册之 Teensy 4.1 实时时钟 (RTC)

在类的初始化函数中,定义了用于控制I2C总线的i2c对象和RTC模块的I2C地址。接着,使用该引脚初始化了一个Pin对象。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。

雕爷学编程 575

事件委托的概念和原理

事件委托优点 减少DOM操作的,减少浏览器的重绘(repaint)和重排(reflow),从而提高性能; 减少内存空间的占用率,因为每一个函数都是一个对象,对象越多,内存占有率就越大,自然性能就越差,使用事件委托,只需要在其父元素中定义一个事件就可以。 适合事件委托的事件有:click,mousedown,mouseup,keydown,keyup,keypress 可以方便地动态添加和...

张彬彬的博客 3137

基于深度学习的文字识别与检测算法研究

基于深度学习的文字识别与检测算法研究 1. 背景介绍 1.1 文字识别与检测的重要性 在当今信息时代,文字作为人类交流和传递信息的主要载体,无处不在。从日常生活中的路牌、广告牌,到办公场所的文件、合同,再到互联网上的网页、图片等

AI天才研究院 1043

事件模型和事件委托

事件模型 模型类型:DOM 0(原始事件类型)、DOM 2 DOM 0 直接在dom上绑定事件。列如:div.nclick =function(){}; 特点: 1、DOM0级事件模型是早期的事件模型,所有的浏览器都是支持的。 2、一个DOM对象只能注册一个同类型的函数,因为注册多个同类型的函数的话,就会发生覆盖,之前注册的函数就会无效。 3、DOM0不会阻止事件冒泡的发生 DOM 2 使用addEventListener和removeEventListener来注册和解除事件 支持事件流的捕获和冒泡,

TXW6666的博客 356

OpenClaw 自定义 Skill 开发完整指南(最新版)

OpenClaw 中的每个 Skill,本质是一套“能力描述 + 执行逻辑”的组合包,核心特征如下:核心载体:以文件夹为单位,文件夹内必须包含SKILL.md文件(能力描述核心);扩展文件:可选agent.py(Python 执行逻辑)、index.ts(TypeScript 执行逻辑)、(辅助文档/示例资源)等;核心优势:AI 通过阅读 SKILL.md 的自然语言描述理解技能,无需严格遵循代码接口,灵活度极高;

haolove527的专栏 2万+

智能制造——解读AI+工业设备预测性维护解决方案【附全文阅读】

摘要:本方案面向设备密集型制造企业,提供基于AI的预测性维护解决方案。通过工业物联网、大数据和AI算法,整合传感器数据与专家知识库,构建异常检测、故障诊断等模型,实现设备台账管理、智能点检等核心功能。方案配套软硬件工具矩阵,已在锂电子等行业落地应用,可降低维护成本30%以上,减少非计划停机50%,助力企业智能化转型。

cdfunlove的博客 138

Vue通过eventBut实现组件全局通信

一、组件之间的层级关系如下图: 现要在test_page_1.vue 组件中改变,MyHeader.vue组件中的某个属性值。 二、eventBus简介: EventBus又称为事件总线。在Vue中可以使用EventBus来作为沟通桥梁的概念,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的“灾难”,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。 Eve...

lyhDream的专栏 662

CATIA二次开发核心技术:多实体零件自动化拆解与装配生成深度解析(零件转产品)

CATIA二次开发核心技术:多实体零件自动化拆解与装配生成深度解析

KE17RS的博客 2145

Unity3D简介

你大概已经错过了00年的互联网潮流,09年的移动互联网潮流。而现在的VR,AR潮流,你还想错过吗?Unity3D学起来!

limingmin2020的博客 1918

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

一个委托和事件的例子

一个委托和事件的例子 在以下情况下,请使用委托: 当使用事件设计模式时。 当封装静态方法可取时。 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。 需要方便的组合。 当类可能需要该方法的多个实现时。 ...

diaochejiang2761的博客 256

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ASP.NET开发 笔试题目详解(3)——委托和事件

问题四: C#中的委托是什么?事件是不是一种委托?答:委托:委托是C#中的一种引用类型,类似于C/C++中的函数指针。与函数指针不同的是,委托是面向对象、类型安全的,而且委托可以引用静态方法和实例方法,而函数指针只能引用静态函数。委托主要用于 .NET Framework 中的事件处理程序和回调函数。 一个委托可以看作一个特殊的类,因而它的定义可以像常规类一样放在同样的位置。与其他类一样,委托...

qq_34573534的博客 250

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#的事件处理与委托

比如说一个公司(场景),你是老板,手下有两个员工,小张和小李。你命令小张注意小李,在开发软件工作的时候如果上网打游戏,你就记录下来,从小李工资里扣100元钱。这个实际上就是现实中的委托。 现在给出一个代码,C#控制台程序,编译运行通过using System; namespace CSharpConsole{public class 场景{[STAThread]public sta...

weixin_30378311的博客 214

.Net中事件与委托的示例详细解

比如说一个公司(场景),你是老板,手下有两个员工,小张和小王。你命令小王,如果小张玩游戏,则小王扣去小张500元钱。 这就是现实中的委托。 实际上,在写程序中,程序员就是老板,小张和小王就是两个对象。小张玩游戏是一个方法,小张还有一个游戏事件,他玩游戏激发这个事件。而小王就是事件处理对象,他负责把小张的钱扣除500。 所以,委托有如下几个要素:1 激发事件的对象--就是小张2 处理对象事件的对象-

笑望人生专栏 2661

1.事件委托的原理以及优缺点 2. 手写原生js实现事件代理,并要求兼容浏览器

Q:事件的委托(代理 Delegated Events)的原理以及优缺点A:委托(代理)事件是那些被绑定到父级元素的事件,但是只有当满足一定匹配条件时才会被挪。这是靠事件的冒泡机制来实现的,优点是:(1)可以大量节省内存占用,减少事件注册,比如在table上代理所有td的click事件就非常棒 (2)可以实现当新增子对象时无需再次对其绑定事件,对于动态内容部分尤为合适缺点是:事件代理的应用常用应该仅

tanzhenyan的博客 660

C#委托与事件以及Observer设计模式(松耦合)深入

第一个例子 public delegate void EatEventHandler(object sender, EatEventArgs e); 这个的定义也可以不要这样.可以直接就定义一个参数 public delegate void EatEventHandler(string e); 但然用的时候的参数要相对应好哦 using System; namespace

u012753922的专栏 948

[C#]委托和事件(详细讲解)

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事

学无止境的专栏 1万+

详解事件代理(事件委托)以及应用场景

事件代理(也称事件委托)事件代理,俗地来讲,就是把⼀个元素响应事件 ( click 、 keydown ......)的函数委托到另⼀个元素 前⾯讲到,事件流的都会经过三个阶段: 捕获阶段 -> ⽬标阶段 -> 冒泡阶段,⽽事件委托就是在冒泡阶段完成 事件委托 会把⼀个或者⼀组元素的事件委托到它的⽗层或者更外层元素上,真正绑定事件的是外层元 素,⽽不是⽬标元素 当事件响应到⽬标元素上时,会通过事件冒泡机制从⽽触发它的外层元素的绑定事件上,然后在外层元 素上去执⾏函数 应用场景 如果我们有⼀

qq_60008492的博客 6034

事件委派案例

开发工具与关键技术: Visual Studio Code 1:创建一个button按钮和一个ul标签,ul标签下创建3个li标签,button按钮添加onclick点击事件,li标签添加a标签 2:给button和li添加内容 7 3:给ul添加ID 4:使用封装函数,把封装函数命名添加到onclick点击事件里面 5:创建一个createElement元素 5:创建一个innerHTML属性 6:点击添加元素给ul标签添

huishi__的博客 5371

事件委托(事件代理)的简单例子,看完就懂

使用背景 事件委托常用在导航和列表中,话不多说,直接上例子。

qq_37788021的博客 3301

委托和事件的应用场景

C#委托和事件的应用场景 接触过委托和事件的人都知道,它们的语法都很简单,真正的难点是在什么场景中利用它们的特性来使用它。下面我希望通过我分析下面的这个案例可以读者有一些启发。有错误的地方还望指出,一起进步,谢谢! 假设你在一天的某个心情好的时刻会玩王者荣耀,你的5个寝室友(A,B,C,D,E…)将在一起打赌,如果你赢了,5个寝室友悄悄各帮你写一门作业,如果你输了你的室友会对你发出嘲讽。 有些同学可能会觉得这个题目很简单,不就是if判断吗。 If(心情好,在玩游戏) { If(赢) { A帮你写英语作业 B

a15970673567的博客 1381

委托的实现步骤及实例

 委托,顾名思义,就是中间代理人的意思. C#中的委托是通过继承System.Delegate中的一个类来实现的,下面是具体的步骤:       1、声明一个委托对象,其参数形式一定要和您想要包含的方法的参数形式一致。          2、定义任何您要定义的方法,其参数形式和第一步中声明的委托对象的参数形式必须相同。       3、创建委托对象并将所希望的方法包含在该委托对象中。     

大爱无疆 1155
上一篇: [原创]两个listbox之间操作数据交换的问题!
hackate
博客等级 码龄23年 40粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值