C#委托
接触C#委托已经很长时间,但是却一直知道怎么用,而不知道为什么要用。今天再查看了N遍资料的前提下,做一下总结以勉励自己。
1、什么是委托:
托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
2、委托特性:
-
委托类似于 C++ 函数指针,但它是类型安全的。
-
委托允许将方法作为参数进行传递。
-
委托可以链接在一起;例如,可以对一个事件调用多个方法。
3、为什么用委托:
- 减少代码量;
- 代码简洁;
- 容易扩展。
4、什么时候用委托:
当多个函数有大量代码重复,只有个别参数或者少量不一样时,应该用委托将代码不同的地方封装为一个函数并作为参数传入。
5、内置委托:
Action
Action是无返回值的泛型委托。
Action 表示无参,无返回值的委托
Action<int,string> 表示有传入参数int,string无返回值的委托
Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托
Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托
Action至少0个参数,至多16个参数,无返回值。
例:
public void Test<T>(Action<T> action,T p) { action(p); }
Func
Func是有返回值的泛型委托
Func<int> 表示无参,返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<object,string,int> 表示传入参数为object, string 返回值为int的委托
Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void
例:
public int Test<T1,T2>(Func<T1,T2,int>func,T1 a,T2 b) { return func(a, b); }
身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃。