委托 delegate

news2024/12/19 7:00:09

1  委托delegate作用和

//委托:方法
//类A(a)--->  类B(b,c)
//问题:c是无法直接访问A中的a方法!使用委托可以完成这个任务。
//委托是对a这个方法的访问起到“桥梁”作用。
//委托:其实就是相当于把一个方法当成变量来使用。
//委托五步法!  
namespace thinger.DelegateTeachDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //【3+4可以合并】
            StudyDelegate myStudy1 = new StudyDelegate(MyStudy1)

            //【3】创建委托变量
            StudyDelegate myStudy = null;

            //【4】关联委托方法
            myStudy = MyStudy1;

            //多路委托(多播)
            myStudy += MyStudy3;
            myStudy += MyStudy2;
           

            //【5】使用委托变量
            myStudy();
            Console.WriteLine("----------------------------");

            //动态删除关联
            myStudy -= MyStudy3;
            myStudy();

            Console.ReadLine();
        }

        //【2】方法编写
        static void MyStudy1()
        {
            Console.WriteLine("我正在学习C#上位机开发!");
        }
        static void MyStudy2()
        {
            Console.WriteLine("你正在学习C#上位机开发!");
        }
       
    }

    //【1】声明委托(声明一个方法的原型)
    public delegate void StudyDelegate();
}

使用步骤

  1. 声明一个委托(方法的原型)
  2. 编写方法
  3. 创建委托类型变量
  4. 关联委托方法
  5. 使用委托变量

多播委托 使用订阅运算符+= 关联方法时 先订阅的先执行

2 委托delegate实现窗体数据逆向传值

背景:在父窗体点击按钮创建3个子窗体 在子窗体使用文本框、按钮控件通过发送消息到父窗体显示,

解决思路,通过委托调用父窗体的输入方法进行消息的传递发送

namespace thinger.DelegateApp2
{

    //委托不仅解决了,数据的逆向传递,还可以有效的提升代码的优质性!

    //【1】声明委托
    public delegate void ReceiveDelegate(string data);

    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        //【3】创建委托变量(私有化)
        private ReceiveDelegate receivgMsg = null;
        private void btnCreateChild_Click(object sender, EventArgs e)
        {
            for (int i = 1; i < 4; i++)
            {
                FrmChild frm = new FrmChild(i);
                frm.Show();

                //【4】关联委托变量和方法
                this.receivgMsg += frm.ReceiveMsg; //这里必须使用+=!!!!!!
            }
        }
        //广播消息
        private void btnSend_Click(object sender, EventArgs e)
        {
            //【5】使用委托变量
            receivgMsg(this.txtSendMsg.Text.Trim());
        }
    }
}



namespace thinger.DelegateApp2
{
    public partial class FrmChild : Form
    {
        public FrmChild(int num)
        {
            InitializeComponent();
            this.Text += $"  [{num}]";
        }

        //【2】编写具体方法(公有化)
        public void ReceiveMsg(string data)
        {
            this.txtContent.Text += data + "\r\n";
        }       
    }
}

总结

委托和类平级 ,注意书写 ,方法写在类中,语句写在方法中

委托的位置是无关紧要的 但要是公共的

将子窗口的委托变量声明为private时 在父窗口是无法访问到该变量的

3 委托delegate实现广播 多播

背景,在父窗体中发送消息 在所有子窗体中显示

本质上在父窗体通过委托调用子窗体方法进行消息显示 使用多播

namespace thinger.DelegateApp2
{

    //委托不仅解决了,数据的逆向传递,还可以有效的提升代码的优质性!

    //【1】声明委托
    public delegate void ReceiveDelegate(string data);

    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        //【3】创建委托变量(私有化)
        private ReceiveDelegate receivgMsg = null;
        private void btnCreateChild_Click(object sender, EventArgs e)
        {
            for (int i = 1; i < 4; i++)
            {
                FrmChild frm = new FrmChild(i);
                frm.Show();

                //【4】关联委托变量和方法
                this.receivgMsg += frm.ReceiveMsg; //这里必须使用+=!!!!!!
            }
        }
        //广播消息
        private void btnSend_Click(object sender, EventArgs e)
        {
            //【5】使用委托变量
            receivgMsg(this.txtSendMsg.Text.Trim());
        }
    }
}



namespace thinger.DelegateApp2
{
    public partial class FrmChild : Form
    {
        public FrmChild(int num)
        {
            InitializeComponent();
            this.Text += $"  [{num}]";
        }

        //【2】编写具体方法(公有化)
        public void ReceiveMsg(string data)
        {
            this.txtContent.Text += data + "\r\n";
        }       
    }
}

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

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

相关文章

【Java服务端开发】深入理解Java中的Server 层的详细分析

目录 1. 什么是服务端&#xff08;Server&#xff09;层&#xff1f; 2. 设计 Server 层的基本原则 2.1 单一职责原则 2.2 面向接口编程 2.3 事务管理 3. 基于 Spring 的 Server 层实现 3.1 示例&#xff1a;创建一个简单的订单服务 3.2 编写 OrderService 3.3 编写 O…

JAVA:代理模式(Proxy Pattern)的技术指南

1、简述 代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理,以控制对这个对象的访问。通过代理模式,我们可以在不修改目标对象代码的情况下扩展功能,满足特定的需求。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什…

XXE练习

pikachu-XXE靶场 1.POC:攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a">]> <foo>&xxe;</foo> 2.EXP:查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SY…

Leetcode打卡:形成目标字符串需要的最少字符串数II

执行结果&#xff1a;通过 题目&#xff1a;3292 形成目标字符串需要的最少字符串数II 给你一个字符串数组 words 和一个字符串 target。 如果字符串 x 是 words 中 任意 字符串的 前缀 &#xff0c;则认为 x 是一个 有效 字符串。 现计划通过 连接 有效字符串形成 targ…

【蓝桥杯】49362.《视频相关度计算》

视频相关性计算 问题描述 小蓝作为异世界最大流媒体网站 LanTube 的高级算法工程师&#xff0c;他想要实现更加精准的视频推荐服务来满足用户的喜好。 其中&#xff0c;**“视频的相关性”**是一个重要指标&#xff0c;它代表了两个视频 A 到 B 的关联程度&#xff0c;记作 f…

ASP.NET|日常开发中数据集合详解

ASP.NET&#xff5c;日常开发中数据集合详解 前言一、数组&#xff08;Array&#xff09;1.1 定义和基本概念1.2 数组的操作 二、列表&#xff08;List<T>&#xff09;2.1 特点和优势2.2 常用操作 三、字典&#xff08;Dictionary<K, V>&#xff09;3.1 概念和用途…

如何将多张图片合并为一个pdf?多张图片合并成一个PDF文件的方法

如何将多张图片合并为一个pdf&#xff1f;当我们需要将多张图片合并为一个PDF文件时&#xff0c;通常是因为我们希望将这些图片整理成一个统一的文档&#xff0c;方便查看、分享或打印。无论是工作中需要提交的报告、学生们需要整理的作业&#xff0c;还是个人收藏的照片、旅行…

【html网页页面013】html+css制作节日主题圣诞节网页含视频、留言表单(独创首发-5页面附效果及源码)

节日主题圣诞节网页制作 &#x1f964;1、写在前面&#x1f367;2、涉及知识&#x1f333;3、网页效果完整效果(5页)&#xff1a;代码目录结构&#xff1a;page1、首页page2、庆祝page3、影响page4、起源page5、留言板 &#x1f308;4、网页源码4.1 html4.2 CSS4.3 源码获取圣诞…

直播预告 | 蓝卓生态说,解锁supOS在化工领域的无限可能

生态是蓝卓生命力的体现&#xff0c;为全方位赋能生态伙伴使用supOS并从中获益&#xff0c;蓝卓打造生态说系列栏目&#xff0c;通过生态沙龙、直播对话、案例剖析、产品解读等&#xff0c;持续展现“12N”的智能工厂创新路径&#xff0c;加速推进工业数字化转型。 嘉宾介绍 朱…

java对子网掩码的转换

一般的子网掩码展示为点分十进制形式&#xff0c;如&#xff1a;255.255.255.0&#xff0c;但有时因为业务需要&#xff0c;我们需要转换成对应的数字&#xff0c;以及数字转成点分十进制&#xff0c;所以整理了java的方法可以进行两者的互相转换 1、点分十进制转数字 public…

亚马逊-用表格创建多变体商品

引言 当我们使用“月亮树选品软件”找到一款不错的产品时&#xff0c;我们会延续这个产品的优点&#xff0c;并对其进行改良。改良之后&#xff0c;我们需要将产品上架到亚马逊平台&#xff0c;以测试这个产品的市场表现。然而&#xff0c;许多亚马逊卖家觉得上传多变体商品这…

使用C#在目录层次结构中搜索文件以查找目标字符串

例程以递归方式搜索目录层次结构中的文件以查找目标字符串。它可以搜索几乎任何类型的文件&#xff0c;即使它不包含 Windows 理解的文本。例如&#xff0c;它可以搜索 DLL 和可执行文件以查看它们是否恰好包含字符串。 下面的代码中显示的ListFiles 方法完成了大部分工作。 …

【深度学习总结】使用PDF构建RAG:结合Langchain和通义千问

【深度学习总结】使用PDF构建RAG&#xff1a;结合Langchain和通义千问 使用平台&#xff1a;趋动云&#xff0c;注册送算力 前言 在大型语言模型&#xff08;LLMs&#xff09;应用领域&#xff0c;我们面临着大量挑战&#xff0c;从特定领域知识的匮乏到信息准确性的窘境&am…

P8772 [蓝桥杯 2022 省 A] 求和

题目描述&#xff1a; 解题思路&#xff1a; 首先这题我们可以直接用两个for循环嵌套来控制两个变量来求值&#xff0c;但是这样做时间复杂度高。这里我们用到了一个前缀和差的方法。通过for循环变量第一个变量&#xff0c;用和差的方法的到第二个量&#xff0c;这样就只用了一…

Flux Tools 结构简析

Flux Tools 结构简析 BFL 这次一共发布了 Canny、Depth、Redux、Fill 四个 Tools 模型系列&#xff0c;分别对应我们熟悉的 ControlNets、Image Variation&#xff08;IP Adapter&#xff09;和 Inpainting 三种图片条件控制方法。虽然实现功能是相同的&#xff0c;但是其具体…

什么是芯片电阻

有人把Chip Resistor翻译成“芯片电阻”&#xff0c;我觉得翻译成“贴片电阻”或“片状电阻”更合适。有些厂商也称之为”电阻片”&#xff0c;英文写作Resistor Chip。比如&#xff1a;Thick film resistor chips&#xff08;厚膜电阻片&#xff09;、Thin film resistor chip…

【Linux】深入理解进程信号机制:信号的产生、捕获与阻塞

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 时间不语&#xff0c;却回答了所有问题 目录 &#x1f4da;前言 &#x1f4da;一、信号的本质 &#x1f4d6;1.异步通信 &#x1f4d6;2.信…

模具生产过程中的标签使用流程图

①NFC芯片嵌入周转筐&#xff0c;通过读卡器读取CK_Label_v3的数据&#xff0c;并将这些信息上传至服务器进行存储&#xff1b; ②服务器随后与客户的WMS&#xff08;仓库管理系统&#xff09;进行交互&#xff0c;记录和同步注塑机的原始数据&#xff1b; ③当周转筐内的模具…

【AIGC安全】CCF-CV企业交流会直播回顾:探寻AI安全治理,共筑可信AI未来

文章目录 一、活动背景&#xff1a;AI技术快速发展与安全治理需求迫切二、论坛内容金耀辉&#xff1a;智能共生时代&#xff1a;平衡生成式AI的创新与风险何延哲&#xff1a;人工智能安全检测评估的逻辑和要点谢洪涛&#xff1a;面向特定人物深度伪造视频的主动防御与被动检测技…

Cesium 无人机航线规划(区域航线)

区域航线&#xff0c;即划定一片区域一键巡查 这里选择点几个点&#xff0c;形成的区域内计算规划航线