首页 新闻资讯 正文

func C# 实例详解委托之Func,Action,delegate(精品)

C# 实例详解委托之Func、Action、delegate(精品)

概述

委托是.NET编程的精髓之一,在日常编程中经常用到,在C#中实现委托主要有Func、Action、delegate三种方式,本节主要就这三种委托的用法通过实例展开讲解。

Func用法解析

【Func】:Func是带返回值的委托:

原型函数如下(以下展示的是有两个参数的情况):

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);

用法举例1: 定义方法StringAddA

public int StringAddA(string a, string b) { return int.Parse(a) + int.Parse(b); }

定义委托func,然后把方法StringAddA委托给它,接下来执行委托并获取结果,注意:

Func<string, string, int> func = StringAddA;是Func<string, string, int> func = new Func<string, string, int>(StringAddA);的简写

Func<string, string, int> func = StringAddA;//简写 var result = func.Invoke("3", "5");//可以简化为func("3", "5") sw.AppendLine($"【func用法1】func返回结果是:{result}");

这里的执行结果是: 【func用法1】func返回结果是:8

用法举例2:

用lamda表达式简化写法,通过+=注册实现多播委托

func += (a, b) => { return int.Parse(a) - int.Parse(b); }; sw.AppendLine($"【func用法2】func返回结果是:{func("3", "5")}");

这里的执行结果是: 【func用法1】func返回结果是:-2

注意 += 可以注册多个委托,委托执行后会按顺序执行方法.

Action用法解析

【Action】:Action是无返回值的委托:

原型函数如下(以下展示的是有两个参数的情况):

public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);

用法举例:

先定义方法:StringAddB

public void StringAddB(string a, string b) { sw.AppendLine($"【Action用法】Action执行结果:{(int.Parse(a) + int.Parse(b))}"); }

实例如下:

Action<string, string> action = StringAddB;//简写 IAsyncResult asyncResult = action.BeginInvoke("3", "5", , );//action("3", "5"),BeginInvoke异步执行,即:开启新现成处理StringAddB action.EndInvoke(asyncResult);//阻塞委托,直到执行完成 if (asyncResult.IsCompleted) { sw.AppendLine($"【Action用法】当前异步委托线程已执行完成"); }

这里BeginInvoke是异步委托,即新开线程去处理,我们的窗体线程在1号线程,这里我们可以在StringAddB里面打印线程id号

sw.AppendLine($"【Action用法】Action执行线程id:{Thread.CurrentThread.ManagedThreadId}");

运行结果:

【Action用法】Action执行线程id:3

这里的EndInvoke是阻塞委托,直到执行完成,当然我们这里也可以用同步的Invoke去执行,甚至Invoke都可以简写去掉,直接写成action("3", "5")

delegate用法解析

【delegate】:delegate是可以有返回值也可以没返回值的委托:

使用前需要先声明:

delegate int DelegateM(string a, string b);//声明,可以有返回值也可以没有

用法举例:

//delegate用法 //DelegateM delegateM = new DelegateM(p.StringAddA); DelegateM delegateM = StringAddA;//简写 sw.AppendLine($"【delegate用法】delegate返回结果是:{delegateM("3", "5")}");

以上就是三种委托的区别和用法讲解,那使用委托最大的优势是什么:

可以将方法当作参数去传递 ,用法举例如下:

Test(func, action);//将方法委托后转化为参数进行传递

定义方法

public void Test(Func<string, string, int> f, Action<string, string> a) { a.Invoke(f.Invoke("3", "5").ToString(), "5"); }

简单理解C#的Func委托

简单理解C# Func委托

Func委托是C#的内置泛型委托Func委托可以代表不同的方法,只需要满足返回值类型和参数类型匹配的要求。Func委托最多可以接受16个输入参数,

最后一个参数是返回值类型

方法如下:

没有输入参数,返回类型为TResult的方法:

Func<TResult>

有1个输入参数T1,返回类型为TResult的方法:

Func<T1, TResult>

有2个输入参数T1和T2,返回类型为TResult的方法:

Func<T1, T2, TResult>

有3个输入参数T1、T2和T3,返回类型为TResult的方法:

Func<T1, T2, T3, TResult>

……

有16个输入参数,返回类型为TResult的方法:

Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,TResult>

4、可以通过Lambda表达式、匿名方法或具名方法来创建Func委托的实例。

5、简单例子

//定义Func委托的实例add:将两个int类型的参数相加并返回一个int类型的结果

Func<int, int, int> add = (x, y) => x + y;

//调用委托

int result = add(2, 3); // result为5

总结

Func委托简洁灵活,可以用于封装各种具有返回值的方法,使得代码更加简洁和易于理解。

相关问答

func 是什么意思_作业帮

[最佳回答]function的缩写,功能、函数的意思应该是自定义的函数名

c语言 func 函数?

C语言程序中,func()指的是Function,表示子例程的一般性名词。在某些编程语言中,它指带返回值的子例程或语句。在一些编程语言中起着关键字的作用。将常用的代...

电脑平车上 FUNC 是什么意思?

您好,电脑平车上FUNC是FUNC:function的简写功能的意思为驻车制动器指示。《GB4094汽车操纵件、指示器信号装置》规定(P)点亮时为红色,表示驻车制动器(手搂子...

Func 怎么用?

Func是.netframework3.0后新加的泛型委托,可直接使用。最后一个占位标识,代表返回值类型,FuncFunc是.netframework3.0后新加的泛型委托,可直接使用。最后一....

laitz激光测距仪上边 func 是什么,怎么用?

FUNC是功能按键,通过func按键可以切换面积、面积连加、体积、三角、双三角等功能。LAITZ激光测距仪可以切换5种单位,分别是米,英尺,英寸,英尺英寸,日尺。5...

c语言 func 的计算方法?

func的计算方法可以通过定义一个函数,接收参数并进行相应的计算操作来实现。在C语言中,我们可以通过编写函数来实现func的计算,首先需要定义函数的返回类型和...

func 函数是干什么的?

void是没有特定返回值的你应该知道吧func你应该是在C++语言教程中看到的吧,那是作者使用来举例或作语法演示的,没什么特别含义,就如”张三李四“一样!作...

func 函数怎么计算?

试试下面这个#includevoidmain(void){doublefunc(int);doubles=0,term;inti;for(i=0,term=1;;i++){t...

全站仪 func 按钮起什么作用?

ADP是英文Adapter/adaptor的缩写,是适配器的意思,也可以理解为扩展功能,多功能万用表会有ADP选购件,如电流分流器、温度适配器、交流钳形传感器等。当使用这...

func 里有几个形参?

函数里可以有零个或多个形参,但是必须有返回值。函数里可以有零个或多个形参,但是必须有返回值。