一流的南昌网站建设,wordpress框架是什么意思,百度做网站教程,网站建设策划书格式委托是.NET编程的精髓之一#xff0c;在日常编程中经常用到#xff0c;在C#中实现委托主要有Func、Action、delegate三种方式#xff0c;这个文章主要就这三种委托的用法通过实例展开讲解。
【Func】#xff1a;Func是带返回值的委托#xff1a;
原型函数如下(以下展示的… 委托是.NET编程的精髓之一在日常编程中经常用到在C#中实现委托主要有Func、Action、delegate三种方式这个文章主要就这三种委托的用法通过实例展开讲解。
【Func】Func是带返回值的委托
原型函数如下(以下展示的是有两个参数的情况)
public delegate TResult Funcin 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委托给它接下来执行委托并获取结果注意
Funcstring, string, int func StringAddA;
是
Funcstring, string, int func new Funcstring, string, int(StringAddA);的简写
Funcstring, 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是无返回值的委托
原型函数如下(以下展示的是有两个参数的情况)
public delegate void Actionin 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))});
}
实例如下
Actionstring, string action StringAddB;//简写
IAsyncResult asyncResult action.BeginInvoke(3, 5, null, null);//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 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(Funcstring, string, int f, Actionstring, string a)
{a.Invoke(f.Invoke(3, 5).ToString(), 5);
}