1.委托理解
说到委托相信大家都很了解,简单的说,委托相当于是一个指针,但是他是函数指针,他可以将方法当参数一样去传递,这样的好处是什么呢? 这样的好处就是可以在一个地方动态的调用函数。随时随地调用没有任何束缚,甚至可以取代反射。 我们使用反射有时候会反射调用另外一个类的方法,这个时候就可以使用委托替代,毕竟反射是有性能损耗的。
2.系统自带委托
上文说到委托的理解,这段说说系统内置的委托,内置委托有什么好处呢? 好处就是我们可以直接使用它们,不需要重新定义并将命名方法分配给该委托,简单就是说不需要自己定义,直接拿来使用。
3.Action类的委托
从图片可以看到Action一共可以有16个泛型参数,并且不返回值。重点有两个,1.参数是16个泛型参数,2,没有返回值。Action的使用可以像这样使用:
Action<int, int> methodss = (e, f) => { Console.Write(e + f); };
这种事匿名委托的用法,完整写法是:
Action<int, int> methodsss = delegate (int k, int h)
{
Console.WriteLine(k + h);
};
4.Func类的委托
Func是另外一种系统内置委托,跟action的区别是他是有返回值的,看定义我们可以看到有个 out TResult的参数,这是返回值。用法如下:
Func<int, int,int> methods = (c, d) => { return c + d; };
这也是匿名委托写法,完整写法是:
Func<int, int,int> methodssss = delegate (int m, int n)
{
return m + n;
};
5.总结:
- 如果要委托的方法没有参数也没有返回值就想到Action
- 有参数但没有返回值就想到
Action<T>
- 无参数有返回值、有参数且有返回值就想到
Func<T>