C#委托:事件驱动编程的基石

目录

了解委托

委托使用的基本步骤

声明委托(定义一个函数的原型:返回值 + 参数类型和个数)

根据委托定义的函数原型编写需要的方法

创建委托对象,关联“具体方法”

通过委托调用方法,而不是直接使用方法

委托对象所关联的方法可以动态变化

委托应用场景


了解委托

  • 委托是一种全新的面向对象的特性,运行在.Net平台
  • 基于委托,开发事件驱动程序变得非常简单
  • 使用委托可以大大简化多线程编程难点

委托使用的基本步骤

  1. 声明委托(定义一个函数的原型:返回值 + 参数类型和个数)

  2. 根据委托定义的函数原型编写需要的方法

  3. 创建委托对象,关联“具体方法”

  4. 通过委托调用方法,而不是直接使用方法

  5. 委托对象所关联的方法可以动态变化

委托对象的声明一般是放在类外面。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DelegateDemo
{internal class Program{static void Main(string[] args){//[3]创建委托对象,关联"具体方法"CalculatorDelegate objCal = new CalculatorDelegate(Add);//[4]通过委托去调用方法,而不是直接使用方法int result = objCal(10, 20);Console.WriteLine("10 + 20 = {0}", result);objCal -= Add; //断开当前委托对象关联的方法objCal += Sub; //重新指向一个新的方法(减法)result = objCal(10, 20); //重新使用委托对象,完成减法功能Console.WriteLine("10 - 20 = {0}", result);Console.ReadLine();}//[2]根据委托对象创建一个"具体方法"实现加法功能static int Add(int a, int b){return a + b;}//[2]根据委托对象创建一个"具体方法"实现减法功能static int Sub(int a, int b){return a - b;}}//[1]声明委托(定义一个函数的原型:返回值 + 参数返回个数和类型)public delegate int CalculatorDelegate(int a, int b);
}

委托应用场景

利用委托实现主窗体和从窗体之间传值

主窗体FrmMain.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace DelegateDemo3
{public partial class FrmMain : Form{public FrmMain(){InitializeComponent();FrmOther objFrm = new FrmOther();//将从窗体的委托变量和主窗体对应的方法关联objFrm.msgSender = this.Receiver;objFrm.Show();}/// <summary>/// 接收委托传递的信息/// </summary>/// <param name="counter"></param>public void Receiver(string counter){this.lblShow.Text = counter;}}//委托声明public delegate void ShowCounter(string counter);
}

从窗体FrmOther.cs 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace DelegateDemo3
{public partial class FrmOther : Form{public FrmOther(){InitializeComponent();}//根据委托创建委托对象public ShowCounter msgSender;//计数private int counter = 0;private void btnClick_Click(object sender, EventArgs e){counter++;if (msgSender != null){msgSender(counter.ToString());}}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/355671.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2022遇到的两个问题

问题一&#xff1a;找不到定义的头文件 别的博主说是&#xff1a;在属性页里面进行改写&#xff0c;改成是&#xff0c;我试过之后并不行&#xff1b; 解决思路&#xff1a;但其实在右边视图里面找到你自己定义的头文件加到你运行文件中就行&#xff1b;因为程序就只有一个入口…

图像分割 K-means聚类分割算法

K-means算法是经典的基于划分的聚类方法 基本思想是以空间中的k个点为中心进行聚类&#xff0c;对最靠近它们的对象归类&#xff0c;类别数为k。不断迭代&#xff0c;逐次更新各聚类中心的值&#xff0c;直至得到最好的聚类结果。 各聚类本身尽可能的紧凑&#xff0c;而各聚类…

elementUI的el-table自定义表头

<el-table-column label"昨日仪表里程(KM)" align"left" min-width"190" :render-header"(h, obj) > renderHeader(h, obj, 参数)" > <template slot-scope"scope"> <span>{{ scope.row.firstStartMil…

【C++】类的六个默认成员函数

文章目录 类的六个默认成员函数一、构造函数二、析构函数三、拷贝构造函数四、赋值运算符重载五、const成员六、取地址及const取地址操作符重载 类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;称为空类。空类中真的什么都没有吗&#xff1f;并不是&#xff0c;…

Mysql之不使用部署在k8s集群的Mysql而是选择单独部署的Mysql的原因

测试准备&#xff1a; 线程组&#xff1a;并发数100&#xff0c;持续时间2min 两个请求&#xff1a;使用k8s集群中的mysql的wordpress对应端口30011 使用单独部署的mysql的wordpress的对应端口为30022 访问同一个博客 测试结果&#xff1a; 汇总报告&#xff1a; 响应时间图&…

《C++ Primer》导学系列:第 7 章 - 类

7.1 定义抽象数据类型 7.1.1 类的基本概念 在C中&#xff0c;类是用户定义的类型&#xff0c;提供了一种将数据和操作这些数据的函数&#xff08;成员函数&#xff09;组合在一起的方法。类定义了对象的属性和行为&#xff0c;通过实例化类来创建对象。 7.1.2 定义类 定义类…

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统--图文解析

实战&#xff01;如何从零搭建10万级 QPS 大流量、高并发优惠券系统–图文解析 原文链接&#xff1a;https://juejin.cn/post/7087824893831544845 原文作者&#xff1a;字节跳动技术团队 需求背景 需要设计、开发一个能够支持十万级 QPS 的优惠券系统 什么是QPS? Queri…

永臻股份即将登陆上交所:业绩高增长,两大投资亮点备受看好

《港湾商业观察》王璐 冲刺上交所主板的永臻科技股份有限公司(以下简称&#xff0c;永臻股份)即将迎来挂牌上市的光荣时刻。 对于这家知名的光伏铝边框核心供应商而言&#xff0c;永臻股份的上市前景也普遍被市场所看好。 日前&#xff0c;永臻股份披露了招股意向书&#xf…

windows下的 GammaRay安装和使用教程

GammaRay功能&#xff1a; 可用于查看运行时的程序对象状态信息以及事件队列 安装步骤&#xff1a; 1.官网下载地址&#xff1a; GammaRay下载地址 下载对应的qt版本适配版本 2.解压包gammaray-2.11.2.zip 解压后新建一个build目录为接下来的编译做准备 3.打开Install.txt 看…

ru俄罗斯域名如何申请SSL证书?

我们日常看到的都是com这种国际域名比较普遍&#xff0c;尤其是主流网站&#xff0c;主要原因考虑的其通用性&#xff0c;那么对于地方性的域名大家很少看到&#xff0c;比如俄罗斯国家域名.ru大家还是有些陌生的&#xff0c;但要说中国.CN域名那你就很熟悉了。 有用户在申请过…

好用的便签是什么 电脑桌面上好用的便签

作为一名文字工作者&#xff0c;我经常需要在繁杂的思绪中捕捉灵感&#xff0c;记录下那些一闪而过的想法。在寻找一款适合电脑桌面的便签应用时&#xff0c;我偶然发现了敬业签便签软件简直是为我量身定制的&#xff0c;它不仅界面简洁&#xff0c;操作便捷&#xff0c;更重要…

eclipse中svn从分支合并到主干及冲突解决

1、将分支先commit&#xff0c;然后再update&#xff0c;然后再clean一下&#xff0c;将项目多余的target都清理掉。 2、将branches切换到trunk 3、工程上右键-》Team-》合并&#xff08;或Merge&#xff09; 4、默认选项&#xff0c;点击Next 5、有未提交的改动&#xff0c;…

利用Java easyExcel库实现高效Excel数据处理

在Java应用程序中&#xff0c;处理Excel文件是一项常见任务&#xff0c;尤其是在需要读取、写入或分析大量数据时。easyExcel是一个基于Java的高性能Excel处理库&#xff0c;它提供了简洁的API和优化的性能&#xff0c;以简化Excel文件的处理。本文将指导您如何使用easyExcel库…

fastadmin配合定时任务

一个系统单纯到linux本身的定时任务&#xff0c;是很不方便的&#xff0c;需要结合起来使用定时任务 - 便捷的后台定时任务管理 – 基于ThinkPHP和Bootstrap的极速后台开发框架 1.安装插件 2.配置宝塔定时任务 3.自己用工具生成规则即可:Cron - 在线Cron表达式生成器

error: ‘CV_YUV2BGR_UYVY‘ was not declared in this scope

遇到这个问题时&#xff0c;按照如下修改可解决问题。 //cv::cvtColor(yuvImg, rgbImg, CV_YUV2BGR_UYVY);cv::cvtColor(yuvImg, rgbImg, cv::COLOR_YUV2RGB_UYVY);

ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期

腾讯云相关文档相关参考-有的点不准确 前言 最近https到期了&#xff0c;想着手动更新一下https证书&#xff0c;结果发现证书现在的有效期只有90天&#xff0c;于是想找到一个自动更新证书的工具&#xff0c;发现了acme.sh&#xff0c;但是网上的文章质量参差不齐&#xff0…

SpringBoot的迭代史,SpringBoot和Spring和Java和Maven和Gradle版本兼容介绍

文章目录 系统环境要求&#xff1a;Spring Boot 3.1.xSpring Boot 3.0.xSpring Boot 2.7.xSpring Boot 2.6.xSpring Boot 2.5.xSpring Boot 2.4.xSpring Boot 2.3.xSpring Boot 2.2.xSpring Boot 2.1.xSpring Boot 2.0.xSpring Boot 1.5.xSpring Boot 1.4.xSpring Boot 1.3.xSp…

SVN 报错Error: Unable to connect to a repository at URL解决方法

1. 报错背景&#xff1a; 使用ssh 用svn拉取仓库代码时&#xff0c;出现如下报错&#xff1a; Can’t create session: Unable to connect to a repository at URL svn://127.0.0.1 …. Can’t connect to host ‘127.0.0.1’: Connection refused at C:/Program Files/Git/mi…

LeetCode118.杨辉三角 | LeetCode119.杨辉三角Ⅱ

LeetCode刷题记录 文章目录 &#x1f4dc;杨辉三角Ⅰ⌨C代码 &#x1f4dc;杨辉三角Ⅱ⌨C代码 &#x1f4dc;杨辉三角Ⅰ 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例1 输入…

人工智能导论 题目

目录 1.人工神经网络参数个数的计算 2.卷积神经网络卷积和池化的计算 知识表示 命题 谓词 谓词公式 1.连接词 2.量词 3.量词的辖域 逻辑等价式 范式 推理规则 全程量词和存在量词之间的关系 产生式 产生式系统 3.命题/谓词逻辑证明 1.​ ​2. 3. 4. 5. 6. …