C#_委托类型以及Action/Fanc_2018Oct

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

委托特别用于实现事件和回调方法。所有的委托都派生自 System.Delegate 类。

      (简单说就是委托是一个空壳,调用委托就是对其赋值(值为某一方法)并执行该值;)

      简单实现五步骤:

     1.声明委托类;                        -->(如: public delegate void MyDelegate();)

     2.定义目标函数  ;                      --> (即写一个或多个需要委托去执行的方法,此方法必须和委托返回值类型参数类型保持一致)

     3.声明一个委托变量;                   -->(MyDelegate deleg;)

     4.将目标函数赋值给委托类;           -->(一般用+/-=符号进行赋值;如 deleg=method1; deleg+= method2;)

     5.调用委托,执行目标方法;                  -->(deleg();    // 执行方法为method1 和 method2)  

 C#库中有两个做好的委托  ( Action  /  Fanc   )

      Action   

      只代表void类型的方法    

     格式 :

               action
               action<参数>

     参考代码:

public static void SayHi()
        {
            Console.WriteLine("sayHi");
        }
        
        public static void SayHiOnePar(int number)
        {
            Console.WriteLine("SayHiOnePar");
        }
        public static void Main(string[] args)
        {
            //委托看的是方法返回值类型和参数类型
            //只要满足该类型的方法都能委托
            Action action = SayHi;
            action();
            Action<int> action01 = SayHiOnePar;
            action01(10);
        }

      Fanc

     针对有返回值类型的

     格式:

              Func<参数,参数,参数.....返回值类型>

     参考代码:

 public static string TestStr()
        {
            Console.WriteLine("无参数 有返回值");
            return string.Empty;
        }

        public static float TestFloat(int i, double d)
        {
            Console.WriteLine("两个参数 一个返回值");
            return 15.5f;
        }
        public static void Main(string[] args)
        {
            //一个代表返回值类型
            Func<string> func01 = TestStr;
            func01();
            Func<int, double, float> func02 = TestFloat;
            func02(10, 15.5);
        }
原文地址:https://www.cnblogs.com/RainPaint/p/9842758.html