c#中的泛型、委托、泛型委托、Action和Func及使用场景系列之四:泛型委托及系统内置Action和Func介绍(完结篇)

一、泛型委托

如果将委托中的参数定义成泛型即是泛型委托,代码如下:

 1     //带1个参数的泛型委托
 2     public delegate string MyGenericDelegate1<T1>(T1 code, string msg);
 3 
 4     //带2个参数的泛型委托,T1是方法的形参类型, TR是方法返回值类型
 5     public delegate TR MyGenericDelegate2<T1, TR>(T1 code, string msg);
 6 
 7     public class Class33
 8     {
 9         public void Test1()
10         {
11             MyGenericDelegate1<string> d1;
12             d1 = Class6.NotifyJson;
13             d1.Invoke("100","SUCCESS"); //用Invoke方法调用
14 
15             MyGenericDelegate2<string, string> d21;//第2个string是返回值类型
16             d21 = Class6.NotifyXml;
17             d21("100", "SUCCESS"); //用委托变量调用
18 
19             MyGenericDelegate2<int, string> d22;//第2个string是返回值类型
20             d22 = Class6.NotifyXml2;
21             d22(100, "SUCCESS"); //用委托变量调用
22         }
23     }

在声明委托变量的时候必须指定类型,调用的时候传入的实参类型必须和声明时一致。

 

二、C#内置的三个泛型委托Action、Func、Predicate

为了便于我们使用委托,C#内置了3个泛型委托,这3个泛型委托的区别如下:

名称 定义 形参数量 返回值类型
Action Action<T1, T2, T3, T4, T5 ...> 0-16个 void
Func Func<T1, T2, T3, T4, T5 ..., TR> 0-16个 泛型TR
Predicate Predicate<T> 1个 bool

有了这3个内置的泛型委托,不需要自己去定义就可以满足我们绝大部分使用委托的场景了。

 

posted @ 2020-12-14 23:19  屏风马  阅读(406)  评论(0编辑  收藏  举报