C# 委托——Func<>

C# 委托——Func<>

demo:
演变1
首先我们创建一下代码:

    public class FuncClass
    {

        static int num = 0;
        public static void StartYourShow()
        {
            while (num < 5)
            {
                num += 1;
                Console.WriteLine("show");
            }
            Console.WriteLine("ShowEnd");
        }
 
    }

然后基础调用:
在这里插入图片描述
现在我们需要拆分这个代码:

 while (num < 5)
            {
                num += 1;
                Console.WriteLine("show");
            }
             Console.WriteLine("ShowEnd");

num < 5:这个是有返回值的
num += 1;Console.WriteLine(“show”);:这个是没有返回值的
Console.WriteLine(“ShowEnd”);:这个是没有返回值的
所以我们用Func<>,Action<>,Action<>来替换

demo Func和Action版本初版:

 public class FuncClass
    {
        static int num = 0;
        //public static void StartYourShow()
        //{
        //    while (num < 5)
        //    {
        //        num += 1;
        //        Console.WriteLine("show");
        //    }
        //    Console.WriteLine("ShowEnd");
        //} 
        public static void StartYourShow(Func<bool> CanEnd, Action Method, Action EndMethod)
        {
            while (!CanEnd())
            {
                Method();
            }
            EndMethod();
        }
        public static bool CanEnd()
        {
            if (num >= 5)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public static void Method()
        {
            num += 1;
            Console.WriteLine("show");
        }
        public static void EndMethod()
        {
            Console.WriteLine("ShowEnd");
        }
    }

调用:

using 学习基础内容.Func委托; 

FuncClass.StartYourShow(FuncClass.CanEnd, FuncClass.Method, FuncClass.EndMethod);
Console.Read();

demo Func和Action版本:

   public static void StartYourShow
   (Func<int,bool> CanEnd,Action<string> Method,Action<int,int> EndMethod)
       {
           while (num < 5)
           {
               num += 1;
               Console.WriteLine("show");
           }
           Console.WriteLine("ShowEnd");
       }

       public static void GetStartYourShow()
       {
           StartYourShow(
               (n)=> n   >= 5,
               (s) => { num++; Console.WriteLine("s:"+s); },
               (m,n)=> Console.WriteLine(m + n) 
               );
       }

直接调用GetStartYourShow()这个方法就行;

简单点的Func<>:

 public static void getinit()
        {
            //定义一个Func类型返回String的无参数的委托
            Func<string> func = returnstring;
            Console.WriteLine(func.Invoke());


            //定义一个Func类型有参数的委托
            // Func<int, int, int,string> func1 =Func<int, int, int,string>(returnint);
            Func<int, int, int,string> func1 = returnint;
            Console.WriteLine(func1(1,2,3)); 

        }
        public static string returnstring()
        {
            return "测试返回string类型的Func";
        }
        public static string returnint(int a,int b,int c)
        {
            int d= a + b + c;
            return d.ToString() ;
        }

一般Func是和lambda一起使用的,用来自定义通用方法的
我们再来看一个案例:

  int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
  int result3 = GetResult((a, b) => a + b, nums, 0, 3);
  int result4 = GetResult((a, b) => a * b, nums, 0, 3);
  Console.WriteLine(result3);
  Console.WriteLine(result4);
//使用Func委托
        static int GetResult(Func<int, int, int> func, int[] nums, int from, int to)
        {
            int result = nums[from];
            for (int i = from + 1; i <= to; i++)
            {
                result = func(result, nums[i]);
            }
            return result;
        }

在这里插入图片描述
Func<int, int, int> func这个作为参数就可以使用lambda表达式(a, b) => a * b,这个func你把他看成函数就容易理解了
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值