泛型委托
泛型委托
简介:
我们每次要使用一个委托时,都需要先声明这个委托类,规定参数和返回值类型,然后才能实例化、调用。为了简化这个过程, .NET 框架为我们封装了三个泛型委托类,因此大部分情况下我们不必再声明委托,可以拿来直接实例化使用,方便了我们的日常Coding。
这三种泛型委托包括:Func<T>委托、Action<T>委托和Predicate<T>委托。
一、泛型委托之Action<>
泛型委托代表返回值为空 void 的委托,它也有一些列重载,最多拥有16个输入参数。
案例一:
//泛型委托之Action,最多可传入16个参数 class Program { //1.定义泛型 //传入一个参数的方法 public static void TestAction<T>(Action<T> action, T p1) { //Action传入一个参数测试 action(p1); } //传入两个参数的方法 public static void TestAction<T, P>(Action<T, P> action, T p1, P p2) { //Action传入两个参数测试 action(p1, p2); } //2.定义委托引用的方法 public static void getString(string a) { //实现int类型打印 Console.WriteLine("测试Action,传入string,并且传入的参数为:" + a); } public static void getInt(int a) { //实现String类型打印 Console.WriteLine("测试Action,传入int,并且传入的参数为:" + a); } public static void getStringAndInt(int a, string name) { //实现int+string类型打印 Console.WriteLine("测试Action,传入int和string,并且传入的参数为:" + a + ":" + name); } static void Main(string[] args) { //3.泛型实例化 TestAction<string>(getString, "WhiteTaken"); //方法引用和传入参数 TestAction<int>(getInt, 666); TestAction<int, string>(getStringAndInt, 666, "WhiteTaken"); Console.Read(); } }
二、泛型委托之Func<>
Func<T>委托代表着拥有返回值的泛型委托。Func<T>有一系列的重载,形式如 Func<T1,T2, ... TResult>,其中TResult代表委托的返回值类型,其余均是参数类型。只有一个T时,即Func<TResult>,代表该委托是无参数的。.NET封装了最多16个输入参数的Funct<>委托。
案例一:
class Program { public class SumClass { //1.定义的Func<>泛型委托引用的方法,必须有返回值和2个参数的 static int add(int a, int b) { return a * b; } static void Main(string[] args) { int sum = 0; //2.使用.NET原生Func<>泛型委托来接收方法,前2个int表示有2个参数,后面的int表示返回int类型 Func<int, int, int> my = add; //int变量Sum来接收委托,利用反射中的Invoke进行援引赋值 sum = my.Invoke(10, 10); Console.WriteLine(sum); Console.ReadKey(); } } }
案例二:
class Program { public class FuncTest { //1.利用.NET 的原生方法定义泛型委托 public static R TestFunc<T1, T2, T3, T4, R>(Func<T1, T2, T3, T4, R> Func, T1 t1, T2 t2, T3 t3, T4 t4) { return Func(t1, t2, t3, t4); } //2.定义泛型委托方法的引用 public static int add(int a, int b, int c, int d) { return (a + b + c + d); } public static int returnInt(int a, int b, int c, string d) { //返回加和 return a + b + c + int.Parse(d); } static void Main(string[] args) { //3.实例化调用 int sum = 0; //使用系统Func<>委托来接收方法,前4个int表示有4个参数,后面的int表示返回int类型 Func<int, int, int, int, int> tf = add; sum = tf.Invoke(10,10 ,10,10); Console.WriteLine(sum); //泛型委托实例化以及传参绑定 sum = TestFunc<int,int,int,string ,int>(returnInt, 1, 2, 3, "4"); //传入方法 Console.ReadKey(); } } }
三、泛型委托之Predicate<>
Predicate<T>一般用的较少,它封装返回值为bool类型的委托,可被Func<T>代替。
案例:
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/14768306.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。