C#中的委托

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

  1. 先申明一种委托,public delegate int Comparison(T x, T y);那我们将得到一种类型(泛型类型)Comparison
  2. 得到委托泛型实例,public Comparison comparator;我们将得到一个委托实例comparator。
  3. 委托实例里面增加函数,可以直接赋值Comparison comparer = (left, right) => left.Length.CompareTo(right.Length);,也可以增加:Comparison 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(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();
    最多16个输入,1个输出:
    public delegate TResult Func(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(T obj);

你可能感兴趣的:(C#中的委托)