前言
在上篇文章C#中委托(delegate)和多播委托的理解中已经基本了解了委托的用法。
由于委托封装的方法我们不一定知道其传入的参数和返回值,例如之前说的的排序方法—————在对象的排序算法中,需要对对象进行比较,而不同对象比较的方法不同,所以比较两个对象的方法的引用可以作为参数传递到排序算法中,这个时候就需要传递方法。
当我们要生成一个封装比较对象的方法的委托时,我们并不知道该方法传入对象是什么,所有我们必须引入泛型的概念来辅助委托的使用。
Action<T>
和Func<T>
泛型委托
除了为每个参数和返回类型定义一个新委托类型外(基本的委托定义方法),还有就是使用Action<T>
和Func<T>
定义委托,Action<T>
委托表示引用一个void
返回类型的方法,且最多可以传递16种参数;Func<T>
类似,但允许调用带返回值的方法。
注意对比普通委托和泛型委托的定义和使用的区别。
泛型委托的定义和使用:
对于上篇加减的例子,可以直接将Func<int, int,int>
类型的委托作为参数:
public int numMethod(int num1,