深入理解C#中委托的使用及不同类型委托的应用示例

在C#中,委托是一种强大而灵活的机制,可以引用一个或多个方法,并允许以类似函数指针的方式进行调用。委托在事件处理、回调函数和多线程编程等场景中非常有用。本文将深入探讨C#中委托的使用,并介绍不同类型委托的应用示例。
在这里插入图片描述


目录

    • 1. 单播委托(Singlecast Delegate)
    • 2. 多播委托(Multicast Delegate)
    • 3. 泛型委托(Generic Delegate)
    • 总结

1. 单播委托(Singlecast Delegate)

单播委托是最简单的委托类型,它只能引用一个方法。以下是使用单播委托的示例代码:

delegate void MyDelegate(string message);class Program
{static void Main(string[] args){MyDelegate myDelegate = new MyDelegate(DisplayMessage);myDelegate("Hello, world!");}static void DisplayMessage(string message){Console.WriteLine(message);}
}

在上述示例中,我们定义了一个名为MyDelegate的单播委托类型,它可以引用一个没有返回值、接受一个字符串参数的方法。然后,我们创建了一个委托实例myDelegate,它引用了DisplayMessage方法。通过委托实例的调用,我们传递了一个字符串参数并执行了DisplayMessage方法。

2. 多播委托(Multicast Delegate)

多播委托是一种特殊的委托类型,可以引用多个方法,并按照添加的顺序依次调用这些方法。以下是使用多播委托的示例代码:

delegate void MyDelegate(string message);class Program
{static void Main(string[] args){MyDelegate myDelegate = null;myDelegate += DisplayMessage1;myDelegate += DisplayMessage2;myDelegate("Hello, world!");}static void DisplayMessage1(string message){Console.WriteLine($"Message 1: {message}");}static void DisplayMessage2(string message){Console.WriteLine($"Message 2: {message}");}
}

在上述示例中,我们定义了一个名为MyDelegate的多播委托类型,它可以引用一个没有返回值、接受一个字符串参数的方法。然后,我们创建了一个委托实例myDelegate,并将两个方法DisplayMessage1DisplayMessage2添加到委托实例中。通过委托实例的调用,我们会依次执行被引用的方法。

3. 泛型委托(Generic Delegate)

泛型委托是C#2.0新增的特性,它提供了一种类型安全的委托机制。可以将泛型委托理解为一种模板,可以用来引用任何可以匹配其签名的方法。以下是使用泛型委托ActionFunc的示例代码:

class Program
{static void Main(string[] args){Action<string> displayMessageAction = DisplayMessage;displayMessageAction("Hello, world!");Func<int, int, int> addFunc = Add;int result = addFunc(3, 5);Console.WriteLine($"The sum is {result}");}static void DisplayMessage(string message){Console.WriteLine(message);}static int Add(int a, int b){return a + b;}
}

在上述示例中,我们使用了ActionFunc这两个常用的泛型委托类型。Action<T>表示一个没有返回值且接受一个T类型参数的方法;Func<T1, T2, TResult>表示一个返回TResult类型值且接受T1T2类型参数的方法。通过泛型委托的使用,我们可以更加灵活地引用不同类型的方法。

总结

委托是C#中的重要特性,它提供了一种方便而强大的方式来引用和调用方法。本文详细介绍了单播委托、多播委托和泛型委托的使用,并提供了相应的示例代码。通过掌握委托的不同类型及其用法,您将能够更好地利用委托来解决各种编程问题,并提高代码的可扩展性和维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow安装 ,在原本的虚拟环境下配置Tensorflow.

1.TensorFlow安装 &#xff0c;在原本的虚拟环境下配置Tensorflowh和pytorch 2.我首先在anaconda的环境下创建了一个tensorflow文件夹 如何先进入D盘&#xff0c;再进入tensorflow文件夹的目录D:cd D:\Anaconda\TensorFlowSoftWarepip install tensorflow如图所示报错解决方法 …

【PyTorch攻略(1/7)】 张量基本语法

一、说明 Tensor 是一种特殊的数据结构&#xff0c;与数组和矩阵非常相似。在 PyTorch 中&#xff0c;我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于 NumPy 和 ndarray&#xff0c;除了张量可以在 GPU 或其他硬件加速器上运行。事实上&#xff0c;张量和…

平滑加权轮询算法java实现

实现代码 /*** 功能描述: 平滑加权轮询算法** author zhang pu* date 11:46 2023/9/22*/public static void smoothnessWeightPollLoadBalance() {Server serverA new Server("127.0.0.1", 5, 0);Server serverB new Server("127.0.0.2", 3, 0);Server s…

想学嵌入式开发,薪资怎么样?

想学嵌入式开发&#xff0c;薪资怎么样&#xff1f; 对于嵌入式工程师来说呢&#xff0c;它重点学习内容就是首先一定要打好基础&#xff0c;如果从编程语言角度来讲&#xff0c;那么可以在语言上选C或者C&#xff0c;你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…

70、Spring Data JPA 的 自定义查询(全手动,自己写完整 SQL 语句)

1、方法名关键字查询&#xff08;全自动&#xff0c;既不需要提供sql语句&#xff0c;也不需要提供方法体&#xff09; 2、Query查询&#xff08;半自动&#xff1a;提供 SQL 或 JPQL 查询&#xff09; 3、自定义查询&#xff08;全手动&#xff09; ★ 自定义查询&#xff08…

如何将 JavaScript Excel XLSX 查看器添加到Web应用程序

在 JavaScript 中创建 Excel 查看器可能是一项艰巨的任务&#xff0c;但使用 SpreadJS JavaScript 电子表格&#xff0c;创建过程要简单得多。在本教程博客中&#xff0c;我们将向您展示如何使用 SpreadJS 的强大功能来创建一个查看器&#xff0c;该查看器允许您在 Web 浏览器中…

强强联合,波卡生态正成为物联网赛道关键入口

自 5 月 23 日&#xff0c;波卡平行链之一 Peaq 宣布将特斯拉和去中心化汽车共享应用引入 Polkadot 生态系统后&#xff0c;其以打造 Polkadot 上 Web3 汽车共享的未来为目标&#xff0c;开启物联网发展的新时代&#xff1b;而在近期&#xff0c;Peaq 又表示将在 9 月前往德国慕…

企业微信 API 接口调用教程:图文详解企业微信 API 的使用方法

本文通过 access_token 凭证的方式来讲解怎么调用 企业微信 API&#xff0c;并一步步介绍如何获取企业微信 API 的 corpsecret、corpid、access_token 凭证以及怎么向企业微信的应用发送消息。 企业微信 API 在线地址为&#xff1a;概述 - 企业微信 API &#xff0c;这个在线地…

mapbox鼠标滑过高亮要素

成果图 实现方法 这里借鉴了官网这个例子 https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/ 这里是图层的样式配置&#xff0c;通过改变select的true和false&#xff0c;来控制渲染的颜色和宽度 paint: {line-opacity: 1,line-color: [case,[boolean, [feature-st…

将自己的代码发布成可以pip安装的包

要将自己的Python代码打包并通过pip进行安装&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建一个新的文件夹&#xff0c;并将您的Python代码放入其中。确保您的代码结构是标准的Python包结构&#xff0c;即包含__init__.py文件和其他可能的模块文件。 结构示例:your_p…

【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

day04_运算符

今日内容 零、 复习昨日 一、运算符 二、键盘录入 三、练习 零、 复习昨日 学习方法: 画面记忆, 过电影回忆 注意变量写法: 数据类型 变量名 值;常用类型 int,double 类型转换 小向大 默认大向小 强制 一、作业 写题技巧 程序题,没有"标准答案", 只要结果符合预期 …