C#委托(Delegate)菜鸟教程

在C#中,委托(Delegate)是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法。

C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的引用的一种引用类型变量,引用可在运行时被改变。

委托在C#中非常常见,用于事件处理、回调函数、LINQ等操作。

所有的委托(Delegate)都派生自System.Delegate类。

委托是一个引用类型,它定义了一个方法签名,可以用于存储指向该签名的方法。通过委托,你可以调用其他类中的方法。

publicdelegate中文格式说明:

publicdelegate返回类型委托名(参数类型参数名,...);例如以下代码,我们定义一个接受两个整数并返回一个整数的委托:

publicdelegateintMathOperation(intx,inty);以下例子的委托可被用于引用任何一个带有一个单一的string参数的方法,并返回一个int类型变量。

当上面的代码被编译和执行时,它会产生下列结果:

ValueofNum:35ValueofNum:175委托的多播(MulticastingofaDelegate)委托对象可使用+运算符进行合并。

一个合并委托调用它所合并的两个委托,只有相同类型的委托可被合并。

-运算符可用于从合并的委托中移除组件委托。

使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表,这被称为委托的多播(multicasting),也叫组播。

下面的程序演示了委托的多播:

ValueofNum:75委托(Delegate)的用途下面的实例演示了委托的用法。委托printString可用于引用带有一个字符串作为输入的方法,并不返回任何东西。

我们使用这个委托来调用两个方法,第一个把字符串打印到控制台,第二个把字符串打印到文件:

TheStringis:HelloWorld移除委托如果你不再需要某个方法,可以通过-=运算符将该方法从委托链中移除。

委托常常与事件(Event)一起使用,事件是一种特殊类型的委托,用于发布和订阅机制。

在C#中,事件本质上就是一个封装了委托的类型,它用于响应程序中的某些操作。

C#提供了几种常见的委托类型:

Action:代表不返回值的方法。可以接受最多16个参数。

ActionprintMessage=Console.WriteLine;printMessage("Hello");2、FuncFunc:代表有返回值的方法。最多接受16个参数,第一个参数是输入参数,最后一个参数是返回值类型。

Funcadd=(x,y)=>x+y;Console.WriteLine(add(3,4));//输出73、PredicatePredicate:代表返回bool值的方法,通常用于条件判断。

PredicateisEven=x=>x%2==0;Console.WriteLine(isEven(4));//输出True委托的注意事项

类型安全:委托是类型安全的,这意味着只有签名匹配的方法才能赋值给委托。

匿名方法和lambda表达式:你可以使用匿名方法或lambda表达式来创建委托实例,简化代码。

Funcadd=(x,y)=>x+y;Console.WriteLine(add(5,3));//输出8异步调用:可以将委托与BeginInvoke和EndInvoke方法一起使用,进行异步调用。

委托是C#中一个非常强大和灵活的特性,可以帮助实现事件驱动的编程、回调机制和函数式编程风格。它不仅提供了代码重用的能力,还提高了程序的模块化程度。理解和掌握委托的使用对于C#编程是非常重要的。

THE END
1.合法C标识符给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。 C语言标识符要求: 非保留字; 只包含字母、数字及下划线(“_”)。 不以数字开头。 输入 一行,包含一个字符串,字符串中不包含任何空白字符,且长度不大于20。 https://blog.csdn.net/qq_41840843/article/details/144174625
2.一个让代码可读性暴增的现代C++特性,同事看了都说好!// 老方法1:用指针来搞定User*findUser(conststring&name){// 找到了就返回指针,找不到就返回 nullptr// 但是等等这个指针谁来删啊?记不住删除的话就内存泄漏啦!}// 老方法2:用 pair 大法pair<User,bool>findUser(conststring&name){// 返回一个值和一个标志位// 但是就算没找https://www.51cto.com/article/803487.html
3.c#中方法签名指的是?任飞儿方法签名由方法名称和一个参数列表(方法的参数顺序和类型)组成。 注意:方法的签名并不包括方法的返回值。虽然每个重载方法可以有不同的返回类型,单返回类型并不足以区分所条用的是哪个方法。 在C#中,同一个类中的两个或两个以上的方法可以相同的名字,只要他们的参数声明不同即可。在这种情况下,该方法就被称为重https://www.cnblogs.com/mmbbflyer/archive/2009/12/14/1623577.html
4.C#中的方法签名是什么?B ( int q1,int q2){}的签名相同 而public int C (int m1,int m2){}则和方法A签名不同https://www.imooc.com/wap/wenda/id/446787
5.C#创建自签名认证文件的方法C#教程这篇文章主要介绍了C#创建自签名认证文件的方法,实例分析了C#自签名认证文件的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例讲述了C#创建自签名认证文件的方法。分享给大家供大家参考。具体如下: 1https://www.jb51.net/article/69514.htm
6.方法(C#编程指南)MicrosoftLearn方法签名 方法访问 方法形参和实参 通过引用传递与通过值传递 显示另外 3 个 更新:2007 年 11 月 “方法”是包含一系列语句的代码块。程序通过“调用”方法并指定所需的任何方法参数来执行语句。在 C# 中,每个执行指令都是在方法的上下文中执行的。Main 方法是每个 C# 应用程序的入口点,在启动程序时由公共语言https://msdn.microsoft.com/zh-cn/library/ms173114(v=vs.90).aspx
7.C#Notizen3理解C#类和对象您可能利用不同的返回类型进行重载,虽然这可能是合法的 C#代码,但是由于方法签名不包含返回类型,因此这可能导致混乱。为最大限度地减少混乱,应避免这样做。 在需要提供多种执行动作的方式时,方法重载很有用,但是可供选择的空间太大时,可能难以应付。 如下是一个方法重载示例: https://www.jianshu.com/p/01e3320194a7
8.C#调用c++的dll执行带参数的函数时请检查PInvoke签名的调用其他信息: 对 PInvoke 函数“test!test.FUNC1::Invoke”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 解决方法: C#默认是stdcall调用约定,你可以把委托改成下面写法 https://www.feelsight.cn/post/140.html
9.c#signature最佳实践有哪些问答C#签名是定义方法、属性、事件等成员的方式,良好的签名可以使代码更易于理解、维护和扩展。以下是一些C#签名的最佳实践:1. 使用有意义的名称:方法、属性和事件的名称应该清晰地表达其功能和用途。避免https://www.yisu.com/ask/38523568.html
10.干货C#自定义特性(Attribute)讲解与实际应用特性可以与方法和属性相同的方式接受参数。 程序可以使用反射检查自己的元数据或其他程序内的元数据。 特性的用处 我们直接从实战中来了解特性意义,针对前两天我们发的一个通讯签名的问题《C#根据类生成签名字符串》和《Android根据类生成签名字符串》,当我们C#后端和Android前端类是一致的时候,根据类型动态生成签名那没https://cloud.tencent.com/developer/article/1471809
11.C#方法详解:定义调用与最佳实践二、定义方法 1. 返回类型 方法可以有返回类型,也可以没有返回类型。如果没有返回类型,则使用void关键字。 2. 方法签名 方法签名由方法名和参数列表组成。参数列表可以为空,也可以包含一个或多个参数。 3. 参数 C# 中的方法可以接受零个或多个参数。参数可以是基本类型,也可以是引用类型。 https://maimai.cn/article/detail?fid=1843011637&efid=zOE53CY6JSasNqG_JPuo1g