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

news2024/11/25 20:48:44

目录

了解委托

委托使用的基本步骤

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

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

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

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

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

委托应用场景


了解委托

  • 委托是一种全新的面向对象的特性,运行在.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.coloradmin.cn/o/1846717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8改进 | FPN | 新型上采样算子CARAFE【全网独家】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、…

构建个人文件上传服务:Python Flask实现上传和下载完整指南

介绍 在本教程中&#xff0c;我们将学习如何使用Python Flask框架将文件上传到服务器&#xff0c;并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接&#xff0c;以便您可以轻松地跟随本教程。 准备工作 首先&#xff0c;您需要安装Python和F…

揭秘无局放电源:定义、工作原理及其在工业设备中的重要性

当代社会对电源安全性&#xff0c;精密性要求越来也高&#xff0c;对电源设备的需求也越来越高。无局放电源作为电源设备中的一种&#xff0c;由于其独特的优点&#xff0c;越来越受到各行各业的关注。目前&#xff0c;无局放电源在全球范围内得到了广泛应用&#xff0c;尤其是…

springboot特殊问题处理2——springboot集成flowable实现工作流程的完整教程(一)

在实际项目开发过程中&#xff0c;流程相关的业务实现采用工作流会异常清晰明了&#xff0c;但是Activity学习成本和开发难度对追求效率的开发工作者来说异常繁琐&#xff0c;但是作为Activity的亲儿子之一的flowable&#xff0c;其轻量化的使用和对应的api会让开发者感受简单&…

今日分享丨浅谈RAG的技术特点及优势

一、引言 随着AI技术的发展&#xff0c;我们见证了人工智能在理解和处理自然语言方面取得的巨大进步。特别是结合了检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;和大语言模型&#xff08;Large Language Model, LLM&#xff09;的系统&#xff0…

华企网安技术博弈:白帽子团队如何破解网赌网站

在数字化时代&#xff0c;網賭作为一种新型犯罪形式&#xff0c;其隐蔽性和跨国性给执法机关带来了前所未有的挑战。一批专业的网络安全团队——白帽子&#xff0c;正利用他们的专业技能与犯罪分子进行技术博弈&#xff0c;有效地破解網賭网站&#xff0c;为打击網賭犯罪贡献力…

银河麒麟V10安装docker和docker-compose

1. 说明 系统镜像使用的是Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso如果是在VMware中安装这个系统&#xff0c;需选择Ubuntu&#xff0c;如果选Centos会有问题。 尝试使用在线方式安装docker&#xff0c;报了很多错误&#xff0c;比较麻烦&#xff0c;建议使用离…

Bilibili开源发布轻量级 Index 系列语言模型:2.8T 训练数据,支持角色扮演

Bilibili首次发布 Index 系列模型中的轻量版本&#xff1a;Index-1.9B 系列 本次开源的 Index-1.9B系列包含以下模型&#xff1a; Index-1.9Bbase:基座模型&#xff0c;具有 19 亿 非词嵌入参数量&#xff0c;在 2.8T 中英文为主的语料上预训练&#xff0c;多个评测基准上与…

Marin说PCB之电源完整性PDN--Murata三端子电容--01

不知道诸位老铁们有没有忘记我们常用的电容的一些特性&#xff0c;例如在其谐振频率左边&#xff0c;电容主要呈容性&#xff0c;在谐振频率右边&#xff0c;电容主要呈感性。我随便找了一个电容&#xff1a;GRT188C80J226ME13&#xff0c;其频率特性图如下所示&#xff1a; 我…

Qt creator day5练习

Qt 中实现TCP 聊天服务器 大致流程 创建套接字服务器QTcpServer对象 通过QTcpServer对象设置监听&#xff0c;即QTcpServer&#xff1a;&#xff1a;listen&#xff08;&#xff09; 基于QTcpServer&#xff1a;&#xff1a;newConnection&#xff08;&#xff09;信号检测…

大模型面试题目精选分享

前言 掌握大模型面试关键&#xff0c;我精选了一系列面试题目。从模型理解到应用实践&#xff0c;全方位考察大模型知识。无论你是初学者还是资深专家&#xff0c;这里都有适合你的题目。快来挑战自己&#xff0c;提升面试技能吧&#xff01; 面试题笔记分享 为了助力朋友们…

日常工作中常用的管理工具

日常工作中常用的管理工具 SWOT分析法&#xff1a; 帮你清晰地把我全局&#xff0c;分析自己在资源方面的优势域劣势&#xff0c;把握环境提供的机会&#xff0c;防范可能存在的风险与威胁&#xff0c;对我们的成功有非常重要的意义 PDCA循环规则&#xff1a; 每一项工作&#…

RPM 打包入门(基于openEuler)

主要参考内容&#xff08;均为官方文档&#xff09;&#xff1a; https://rpm-packaging-guide.github.io/#building-rpms https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/8/html/packaging_and_distributing_software/introduction-to-rpm_packagin…

用Python设置Excel工作表网格线的隐藏与显示

Excel表格界面的直观性很大程度上得益于表格中的网格线设计&#xff0c;这些线条帮助用户精确对齐数据&#xff0c;清晰划分单元格。网格线是Excel界面中默认显示的辅助线&#xff0c;用于辅助定位&#xff0c;与单元格边框不痛&#xff0c;不影响打印输出。然而&#xff0c;在…

Spring的启动扩展点机制详解

在Java的世界中&#xff0c;我们知道Spring是当下最主流的开发框架&#xff0c;没有之一。而在使用Dubbo、Mybatis等开源框架时&#xff0c;我们发现可以采用和Spring完全一样的使用方式来使用它们。 可能你在平时的使用过程中并没有意识到这一点&#xff0c;但仔细想一想&…

34 张动图:线缆,以太网与网络寻址

以太网 本地主机访服务器 以太网标准 非屏蔽双绞线&#xff08;UTP&#xff09; 电磁干扰 串扰 双绞线 真实的双绞线 线缆与引脚对齐方式 科普&#xff1a;网线每根芯的作用 引脚连接 数据传输与接收 主机直连到交换机 主机直连到主机&#xff08;或交换器&#xff09; Auto M…

C++ 矩阵的最小路径和解法

描述 给定一个 n * m 的矩阵 a&#xff0c;从左上角开始每次只能向右或者向下走&#xff0c;最后到达右下角的位置&#xff0c;路径上所有的数字累加起来就是路径和&#xff0c;输出所有的路径中最小的路径和。 数据范围: 1≤&#x1d45b;,&#x1d45a;≤5001≤n,m≤500&…

# 消息中间件 RocketMQ 高级功能和源码分析(九)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;九&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a; 同步刷盘分析 1、刷盘机制 RocketMQ 的存储是基于 JDK NIO 的内存映射机制&#xff08;MappedByteBuffer&#xff09;的&#xff0c;消息存储首先将消息追…

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

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

前瞻展望,中国信通院即将发布“2024云计算十大关键词”

人类对于未知领域的探索欲望&#xff0c;似乎总是无穷无尽&#xff0c;而探索欲反过来推动了技术的革新与进步。今年以来&#xff0c;AI大模型成为科技领域最为确定的趋势之一。在大模型开启的AI原生时代&#xff0c;AI原生正在重构云计算的演化逻辑和发展走向&#xff0c;MaaS…