当前位置: 首页 > 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());}}}}

http://www.lryc.cn/news/379338.html

相关文章:

  • Git的下载安装及可视化工具小乌龟
  • 【面试实战】# 并发编程之线程池配置实战
  • Pytest 读取excel文件参数化应用
  • qt 一个可以拖拽的矩形
  • C# 启动exe 程序
  • Netty中的Reactor模型实现
  • dll丢失应该怎么解决,总结5种解决DLL丢失问题的方法
  • dial tcp 10.96.0.1:443: connect: no route to host
  • VScode创建ROS项目 ROS集成开发环境
  • nodejs从基础到实战学习笔记-nodejs简介
  • 2024年最新版------二进制安装部署Kubernetes(K8S)集群
  • 【mysql】关键词搜索实现
  • Python面试十问2
  • C# OpenCvSharp 图像处理函数-颜色通道-cvtColor
  • 总结之LangChain(三)——模型IO缓存
  • 判断一个Java服务是不是GateWay
  • 三次插值曲线--插值技术
  • python循环结构
  • 深入理解Netty的Pipeline机制:原理与实践详解
  • 直方图均衡化示例
  • 私域电商新纪元:消费增值模式的创新与成功实践
  • Java——IO流(一)-(6/8):字节流-FileInputStream 每次读取多个字节(示例演示)、一次读取完全部字节(方式一、方式二,注意事项)
  • 服务器SSH 免密码登录
  • Linux安装MySQL以及远程连接
  • SQL Server 数据库分页技术详解:选择最佳方法优化查询性能”。
  • electron录制-镜头缩放、移动
  • 红队内网攻防渗透:内网渗透之内网对抗:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound
  • 2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)
  • 【网络安全】网络安全基础精讲 - 网络安全入门第一篇
  • 初识 GPT-4 和 ChatGPT