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

浅谈C#委托

一、基本介绍

委托是一种引用类型,它表示对方法的引用,即委托就是一种用来指向一个方法的引用类型变量。

委托(Delegate)是一种特殊的类型,它定义了方法的类型,使得可以将方法作为参数传递,或者将其赋值给变量。委托是实现事件和回调方法的基础。

二、基本使用

定义委托类型:首先,你需要定义一个委托类型,指定它可以接受的方法的签名。

public delegate int Operation(int x, int y);

创建委托实例:然后,你可以创建委托类型的实例,并将方法赋值给它。

public int Add(int a, int b)
{
    return a + b;
}

public int Subtract(int a, int b)
{
    return a - b;
}

Operation op = new Operation(Add); // 将Add方法赋值给委托

调用委托:最后,你可以通过委托实例调用方法。

int result = op(5, 3); // 调用Add方法

委托与方法的匹配

  • 方法签名匹配:委托定义的方法签名必须与要赋值给它的方法的签名完全匹配。
  • 返回类型:方法的返回类型必须与委托定义的返回类型相同。
  • 参数列表:方法的参数列表必须与委托定义的参数列表完全相同。

多播委托

C# 允许将多个方法赋值给同一个委托实例,这种委托称为多播委托。你可以使用 +=-= 运算符来添加或移除方法。

public void ShowMessage(string message)
{
    Console.WriteLine(message);
}

Operation op = new Operation(Add);
op += Subtract; // 添加Subtract方法
op += ShowMessage; // 错误:ShowMessage的签名与Operation不匹配

int result = op(5, 3); // 首先调用Add,然后调用Subtract

泛型委托

从C# 2.0开始,你可以使用泛型委托来定义可以接受任何类型参数的委托。

public delegate T Operation<T, U>(T x, U y);

委托与事件

委托在事件处理中扮演着核心角色。事件是一种特殊的多播委托,用于在特定事件发生时通知多个方法。

public delegate void EventHandler(object sender, EventArgs e);

public event EventHandler MyEvent;

protected virtual void OnMyEvent(EventArgs e)
{
    MyEvent?.Invoke(this, e);
}


http://www.kler.cn/news/285171.html

相关文章:

  • zdppy+vue3+onlyoffice文档管理系统实战 20240828上课笔记 zdppy_cache框架完成和验证码框架继续优化
  • EmguCV学习笔记 VB.Net 第8章 图像分割
  • org.apache.commons.lang.math.NumberUtils#isNumber 解释
  • 大语言模型数据增强与模型蒸馏解决方案
  • 【最新华为OD机试E卷】空栈压数(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 【测试】——开发模型与测试模型
  • 黑神话 悟空 配置 Mac玩游戏
  • vue3中ref绑定的节点顺序错乱
  • day36
  • 【MySQL 12】事务管理 (带思维导图)
  • leetcode 147.对链表进行插入排序
  • Pr:代理预设
  • [E二叉树] lc110. 平衡二叉树(dfs+自底向上)
  • Java技术栈 —— Spark入门(二)之实时WordCount
  • 基于微信小程序的电动车租赁系统---附源码97332
  • 遇到的BUG及解决方法
  • 【读书笔记-《30天自制操作系统》-12】Day13
  • 监控平台之上报(未完成)
  • Python算法工程师面试整理-Python 编程技巧
  • 使用Ansible stat模块检查目录是否存在
  • 【Docker】Dockerfile实列-Nginx镜像构建
  • 类与ES6类之间的继承
  • 叶斯神经网络(BNN)在训练过程中损失函数不收敛或跳动剧烈可能是由多种因素
  • 全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型
  • P02-Java流程控制基本结构
  • codetest
  • Linux下递归设置目标目录及其子目录和文件的权限
  • Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图
  • 项目策划书六度自由双足机器人
  • WHAT - 通过 react-use 源码学习 React(Animations 篇)