C#高级 03委托
2023-12-27 23:17:00
1.delegate委托定义
委托需要先定义后使用
delegate void IntMethodInvoker(int x);
定义了一个委托InMethodInvoker,这个委托可以指向一个带一个int
类型参数,返回值为void的方法
2.Action委托和Func委托
Action委托引用了一个void返回类型的方法,T表示方法参数,先看Action委托有那些
Action
Action<in T>
Action<in t1,in t2>
Action<in t1,in t2,···,t16>
Func引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回值类型
Func<out TResult>
Func<in t,out TResult>
Function<in t1,in t2,···,in t16,out TResult>
3.多播委托
前面是用的委托都只包含一个方法调用,但是委托也可以包含多个方法,这种委托叫做多播委托。使用多播委托可以按照顺序调用多个方法,多播委托只能得到调用的最后一个方法结果,一般我们把多播委托的返回值类型声明为viod。
Action action1 = Test1;
action2 += Test2;
action2 -= Test1;
//遍历多播委托
Delegate[] delegates = action1.GetInvocationList();
foreach (Delegate d in delegates)
{
d.DynamicInvoke();
}
多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出异常,整个迭代就会停止。取得多播委托中所有方法的委托
4.另一种委托定义方式
前面使用委托都是先定义一个方法,然后把方法给委托的实例。但还有另外一种使用委托的方式,不用去定义一个方法,应该说是使用匿名方法(方法没有名字)
Func<int,int,int> plus = delegate(int a, int b)
{
int temp = a+b;
return temp;
}
int res = plus(34,34)
Console.WriteLine(res);
//上述代码可以换成下面一行
Func<int, int, int> plus = (a, b) => { return a + b; };
Lambda表达式外部变量
通过Lambda表达式可以访问Lambda表达式外部的变量,这是一个非常好的功能,但是如果不能正确使用,也会非常危险。
文章来源:https://blog.csdn.net/younger_to_older/article/details/135253656
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!