哈喽,你好啊,我是雷工!
在C#中可以使用系统泛型委托来处理不同类型参数的方法。
系统泛型委托是定义在System.Action和System.Func两个类型中的。
Func和Action大大简化了事件处理、回调机制以及高阶函数(例Lambda表达式、LINQ查询)的使用,提升了代码的可读性和可维护性。
两者的主要不同在于:
Action是一个无返回值的泛型委托,
Func是有返回值的泛型委托。
01 Func委托Func委托用于那些具有返回值的方法。
Func可以有多个输入参数,但只能有一个返回值。
Func的返回值类型和其输入参数的类型都是泛型类型参数。
Func委托的基本形式:
Func<TResult>
Func<T1,TResult>
Func<T1,T2,TResult>
……
Func<T1,T2,...,Tn,TResult>
其中T1到Tn是输入参数的类型,可以包含0-16个参数,TResult是返回值的类型。
通过使用Func委托,开发者可以轻松地将方法作为参数进行传递、赋值给变量,或在需要时调用它。
02 Action委托Action委托用于那些没有返回值的方法。
Action可以有多个输入参数,但本身不返回任何值。
Action委托的基本形式:
Action
Action<T1>
Action<T1,T2>
……
Action<T1,T2,... ,Tn>
其中T1到Tn是输入参数的类型,可以包含0-16个参数。
03 应用场景①Action用于需要传递一个不返回任何值的方法给另一个方法时使用,在多线程中使用的比较多,如事件处理、遍历操作等。
②Func用于需要传递一个方法,并且这个方法应该返回一个结果时使用,在扩展方法中使用的非常多,如LINQ查询,函数式编程等。
04 优点①提供了类型安全的方式来表示委托。
②减少了自定义委托类型的需求,使代码变得更简洁。
③与泛型和Lambda表达式结合使用,大大提高了代码的灵活性和可读性。
05 后记虽然不使用Func和Action也能实现想要实现的功能,但是如果能够灵活正确的使用Func和Action泛型委托,有助于提升我们的代码质量,让我们写出更加优雅的、健壮的、可读性强、易于维护的代码。
我们应该致力于此,而不是堆砌低质量的代码,让后面接手的同学骂骂咧咧的在你的屎山上进行升级。