C# 3.0 / C# 3.5 系统内置委托

内置委托的定义声明:

  System.Func,代表有返回类型的委托:

    public delegate TResult Func<out TResult>();
    public delegate TResult Func<in T, out TResult>(T arg);
    ……

    注:输入泛型参数 -in 最多可以有16个,输出泛型参数 -out 只有一个。

  System.Action,代表无返回类型的委托:

    public delegate void Action();
    public delegate void Action<in T>(T obj);       //list.Foreach
    public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
    ……

    注:最多有 16 个参数(全是输入参数)。

Func / Action 委托使用可变性:

      Action<object> test = delegate (object o) { Console.WriteLine(o); };
      Action<string> test2 = test;

      Func<string> fest = delegate () { return Console.ReadLine(); };
      Func<string> fest2 = fest;

    协变指的是:委托方法的返回值类型 直接或间接继承自委托签名的返回值类型,

    逆变则是:参数类型继承自委托方法的参数类型。

其他系统内置委托:

    public delegate bool Predicate<in T>(T obj);        //list.Find
    public delegate int Comparison<in T>(T x, T y);      //list.Sort

    System.Predicate<T> 代表返回 bool 类型的委托,用作执行表达式

    System.Comparison<T> 代表返回 int 类型的委托,用于比较两个参数的大小

    为什么要定义这么多简单的委托?  方便!

原文地址:https://www.cnblogs.com/zhangchaoran/p/8727356.html