C#中的委托

就目前的学习进度,可将委托实例视为一个数据元素为函数的数组,执行委托实例就是将里面的函数都执行一遍。
具体使用:

  1. 先申明一种委托,public delegate int Comparison<in T>(T x, T y);那我们将得到一种类型(泛型类型)Comparison
  2. 得到委托泛型实例,public Comparison<T> comparator;我们将得到一个委托实例comparator。
  3. 委托实例里面增加函数,可以直接赋值Comparison<string> comparer = (left, right) => left.Length.CompareTo(right.Length);,也可以增加:Comparison<string> comparer += (left, right) => left.Length.CompareTo(right.Length);

可以看到,最终我们经历了申明委托类型 -> 得到委托实例 才得到一个实际可用的委托。其中申明委托类型 实际上就是申明参数列表,如果考虑泛型的话,实际上就是申明输入,输出的参数个数。

所以,申明委托类型这部分,.Net提供了一点小小的帮助,.Net提供了Action、Func、Predicate三种内置委托类型申明

  • Action ,Action最重要的一点:返回值为void
    其申明为public delegate void Action();这个是没有输入参数的。还提供其他输入参数个数的,1,2,3,4直到16个,其申明如下😂:
    public delegate void Action<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8,in T9,in T10,in T11,in T12,in T13,in T14,in T15,in T16>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
    所以超过17个类型就需要自己申明委托类型了,一般人也用不到这么多

  • Func,Func最重要的一点:带有一个返回值,无输入参数申明:public delegate TResult Func<out TResult>();
    最多16个输入,1个输出:
    public delegate TResult Func<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8,in T9,in T10,in T11,in T12,in T13,in T14,in T15,in T16,out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);

  • Predicate,Predicate最重要的一点:返回值为bool,仅一个申明形式:public delegate bool Predicate<in T>(T obj);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容