当前位置: 首页 > news >正文

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());}}}}

相关文章:

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

目录 了解委托 委托使用的基本步骤 声明委托(定义一个函数的原型&#xff1a;返回值 参数类型和个数&#xff09; 根据委托定义的函数原型编写需要的方法 创建委托对象&#xff0c;关联“具体方法” 通过委托调用方法&#xff0c;而不是直接使用方法 委托对象所关联的方…...

Git的下载安装及可视化工具小乌龟

一、 Git 的下载 第1步&#xff1a;下载Git&#xff0c;下载地址&#xff1a;Git for Windows 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#…...

【面试实战】# 并发编程之线程池配置实战

1.先了解线程池的几个参数含义 corePoolSize (核心线程池大小): 作用: 指定了线程池维护的核心线程数量&#xff0c;即使这些线程处于空闲状态&#xff0c;它们也不会被回收。用途: 核心线程用于处理长期的任务&#xff0c;保持最低的线程数量&#xff0c;以减少线程的创建和…...

Pytest 读取excel文件参数化应用

本文是基于Pytest框架&#xff0c;读取excel中的文件&#xff0c;传入页面表单中&#xff0c;并做相应的断言实现。 1、编辑媒体需求 首先明确一下需求&#xff0c;我们需要对媒体的表单数据进行编辑&#xff0c;步骤如下&#xff1a; 具体表单如下图所示 1、登录 2、点击我…...

qt 一个可以拖拽的矩形

1.概要 2.代码 2.1 mycotrl.h #ifndef MYCOTRL_H #define MYCOTRL_H#include <QWidget> #include <QMouseEvent>class MyCotrl: public QWidget {Q_OBJECT public://MyCotrl();MyCotrl(QWidget *parent nullptr); protected:void paintEvent(QPaintEvent *even…...

C# 启动exe 程序

(1) publicbool Start () System.Diagnostics.Process process new System.Diagnostics.Process(); process.StartInfo.FileName "iexplore.exe"; //IE浏览器&#xff0c;可以更换 process.StartInfo.Arguments "http://www.baidu.com"; process.…...

Netty中的Reactor模型实现

Netty版本&#xff1a;4.1.17 Reactor模型是Doug Lea在《Scalable IO in Java》提出的&#xff0c;主要是针对NIO的。 其中的主从Reactor模式在Netty中的配置如下&#xff1a; EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workerGroup new NioEv…...

dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法

在数字时代&#xff0c;我们与计算机的每一天都密不可分。然而&#xff0c;就像所有技术产品一样&#xff0c;我们的计算设备也时不时地会出现一些问题&#xff0c;让人头疼不已。就在上周&#xff0c;我遭遇了一个令人崩溃的技术挑战——DLL文件丢失。这个看似微不足道的小问题…...

dial tcp 10.96.0.1:443: connect: no route to host

1、创建Pod一直不成功&#xff0c;执行kubectl describe pod runtime-java-c8b465b98-47m82 查看报错 Warning FailedCreatePodSandBox 2m17s kubelet Failed to create pod sandbox: rpc error: code Unknown desc failed to setup network for…...

VScode创建ROS项目 ROS集成开发环境

ROS使用VScode创建项目步骤 1.创建ROS工作空间2.启动VScode3.VScode编译ROS4.创建ROS功能包C语言开发Python语言开发 本文章介绍了如何在Ubuntu18.04系统下搭建VScode 的ROS项目 搭建项目分为一下几个步骤&#xff1a; 1.创建ROS工作空间 创建一个demo的ROS工作空间&#xff0…...

nodejs从基础到实战学习笔记-nodejs简介

一、Node.js简介 • Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。 • Node采用Google开发的V8引擎运行js代码&#xff0c;使用事件驱动、非阻塞和异步I/O模型等技术来提高性能&#xff0c;可优化应用程序的传输量和规模。 1.1 特性 …...

2024年最新版------二进制安装部署Kubernetes(K8S)集群

Kubernetes二进制集群部署 文章目录 Kubernetes二进制集群部署资源列表基础环境一、环境准备1.1、绑定映射关系1.2、所有主机安装Docker1.3、所有主机设置iptables防火墙 二、生成通信加密证书2.1、master上成功CA证书2.2.1、创建证书存放位置并安装证书生成工具2.2.2、拷贝证书…...

【mysql】关键词搜索实现

关键词搜索实现两种方式 -- 方式1 模糊匹配搜索 -- 场景一&#xff1a;搜索出来地址内包含‘李’和‘中国’的 select * from tn_md_cust_link where address like concat (%李%) or address like concat (%中国%) -- 场景二&#xff1a;搜索地址或者名称包含 ‘181’ 的 …...

Python面试十问2

一、如何使用列表创建⼀个DataFrame # 导入pandas库 import pandas as pd# 创建一个列表&#xff0c;其中包含数据 data [[A, 1], [B, 2], [C, 3]]# 使用pandas的DataFrame()函数将列表转换为DataFrame df pd.DataFrame(data, columns[Letter, Number]) # 列名# 显示创建的…...

C# OpenCvSharp 图像处理函数-颜色通道-cvtColor

使用 OpenCvSharp 中的 cvtColor 函数进行图像颜色转换 在图像处理领域,颜色空间转换是一个非常常见的操作。OpenCvSharp 提供了一个强大的函数 cvtColor 来处理这类转换。本文将详细介绍 cvtColor 函数的使用方法,并通过具体的示例演示如何在实际项目中应用这些知识。 函数…...

总结之LangChain(三)——模型IO缓存

一、聊天模型缓存 LangChain为聊天模型提供了一个可选的缓存层。这有两个好处&#xff1a; 如果您经常多次请求相同的完成结果&#xff0c;它可以通过减少您对LLM提供程序的API调用次数来帮您节省费用。 它可以通过减少您对LLM提供程序的API调用次数来加快您的应用程序速度。…...

判断一个Java服务是不是GateWay

方法 直接在对应服务的url后变加上后缀/actuator/gateway/routes&#xff0c;看是否会返回Gateway的路由信息。 如果返回了GateWay的路由列表&#xff0c;则该服务为Gateway服务。...

三次插值曲线--插值技术

三次插值曲线 1.1.三次样条曲线 三次样条曲线的基本思想是&#xff0c;在给定的一系列点&#xff08;称为控制点或数据点&#xff09;之间&#xff0c;通过一系列三次多项式曲线段来拟合这些点&#xff0c;使得整个曲线既平滑又准确地通过所有控制点。 1.1.1.数学定义 给定…...

python循环结构

1.while 循环 语句&#xff1a; while 循环条件表达式&#xff1a; 代码块 else&#xff1a; 代码块 小练&#xff1a; 设计一百以内的偶数相加 n 0 while n < 100:n 1if n % 2 0 :print(n) 判断是不是闰年&#xff08;四年一润和百年不润&#xff0c;或者四百年一润&am…...

深入理解Netty的Pipeline机制:原理与实践详解

深入理解Netty的Pipeline机制&#xff1a;原理与实践详解 Netty是一个基于Java的高性能异步事件驱动的网络应用框架&#xff0c;广泛应用于高并发网络编程。&#xff08;学习netty请参考&#xff1a;深入浅出Netty&#xff1a;高性能网络应用框架的原理与实践&#xff09;Nett…...

【亲测免费】 开启高效OCR之旅:Delphi集成Tesseract 4.0完全指南

开启高效OCR之旅&#xff1a;Delphi集成Tesseract 4.0完全指南 【下载地址】Delphi调用Tesseract4.0进行OCR识别已打包全部DLL 本仓库提供了通过Delphi环境调用Google的Tesseract OCR引擎4.0版本的示例代码和所有必要的DLL文件。Tesseract是一款强大的开源文字识别系统&#xf…...

5 分钟快速上手 hoist-non-react-statics:提升组件静态属性的完整教程

5 分钟快速上手 hoist-non-react-statics&#xff1a;提升组件静态属性的完整教程 【免费下载链接】hoist-non-react-statics Copies non-react specific statics from a child component to a parent component 项目地址: https://gitcode.com/gh_mirrors/ho/hoist-non-reac…...

HTML代码加密工具源码_在线网页加密解密_防复制源码

概述 在前端开发与网页设计中&#xff0c;保护原创代码不被轻易复制或篡改是许多开发者的核心诉求。无论是为了隐藏核心逻辑&#xff0c;还是防止样式被恶意盗用&#xff0c;一款高效、安全的加密工具都显得尤为重要。为此&#xff0c;幽络源源码网特别整理并分享这款HTML代码…...

玩客云直刷Armbian集成宝塔:一站式搭建个人服务器

1. 玩客云改造前的准备工作 几年前花25块钱收了个二手玩客云&#xff0c;本来只是想当个下载机用&#xff0c;没想到这玩意儿刷了Armbian之后简直是个宝藏。特别是找到那个自带宝塔面板的直刷包之后&#xff0c;直接变身成全能小服务器&#xff0c;建站、跑服务、做测试环境样…...

别再手动写滤波器了!用Simulink DSP工具箱5分钟搞定一个可调带宽IIR滤波器

别再手动写滤波器了&#xff01;用Simulink DSP工具箱5分钟搞定一个可调带宽IIR滤波器 信号处理工程师的日常工作中&#xff0c;滤波器设计是个绕不开的话题。无论是音频处理、通信系统还是生物医学信号分析&#xff0c;我们总需要根据不同的应用场景调整滤波器参数。传统方法中…...

使用Taotoken后,我们的团队如何清晰观测每个模型的API用量与成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后&#xff0c;我们的团队如何清晰观测每个模型的API用量与成本 作为团队的技术负责人&#xff0c;在引入多个大模型A…...

构建金融级 AI Agent:Claude for Financial Services 架构解析

一、 金融 AI 的核心挑战&#xff1a;通用 LLM 的局限性 在金融实战中&#xff0c;通用大模型&#xff08;如 Claude 3.5, GPT-4&#xff09;直接上岗会面临三大障碍&#xff1a; 幻觉风险&#xff1a;在财务建模中&#xff0c;极小的数值偏差即可导致估值错误。数据孤岛&#…...

S32K3 PIT定时器深度解析:从硬件原理到汽车电子实战应用

1. 项目概述&#xff1a;为什么S32K3的PIT如此值得深挖&#xff1f;在嵌入式开发&#xff0c;特别是汽车电子领域&#xff0c;定时器是驱动整个系统心跳的核心外设。当项目标题指向“S32K3的周期性中断定时器&#xff08;PIT&#xff09;”时&#xff0c;这绝不仅仅是一个简单的…...

15分钟搞定国标视频监控平台部署,wvp-GB28181-pro让安防系统搭建如此简单!

15分钟搞定国标视频监控平台部署&#xff0c;wvp-GB28181-pro让安防系统搭建如此简单&#xff01; 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、…...

Umi-CUT:三分钟解决图片批量处理难题,让工作效率翻倍!

Umi-CUT&#xff1a;三分钟解决图片批量处理难题&#xff0c;让工作效率翻倍&#xff01; 【免费下载链接】Umi-CUT 图片批量去黑边/裁剪/压缩工具&#xff0c;带界面。可排除图片边缘的色块干扰&#xff0c;将黑边删除干净。基于 Opencv 。 项目地址: https://gitcode.com/g…...