委托 (匿名方法 Lambda表达式,和各种泛型委托) (三)

本文详细解析了C#中的Func和Action委托类型,介绍了它们在返回值、参数和用途上的差异,通过实例展示了如何使用Lambda表达式简化代码。重点涵盖了Action的多线程应用和Func的扩展方法使用。
摘要由CSDN通过智能技术生成

系统委托:

两种方式:一种由返回值Fun<args>,一种是没有返回值的Action<args>

Action<>主要应用多线程

Func<>主要应用扩展方法

 

Action 参数全部是输入类型有17种方法重载,只是参数数量区别;

Func 是带有一个输出 参数而且只有一个,也有17个方法重载。

****************************************************************************************************************************************************案例分析**************************************************************

 class Program
    {
        static void Main(string[] args)
        {
            Func<int, int, double> myFunc = Add;
            Console.WriteLine("myFunc(5,6)=" + myFunc(5, 6));
            Test();
            Test1();
            Test2();
            Test3();
            Console.Read();
        }

        //基本使用
        private static double Add(int a, int b)
        {
            return a + b;
        }

        //重要使用

        // {10, 9, 8, 7, 6, 5, 4, 3, 2}数组,从数组中指定位置抽取3个数,求和,求积
         static  int Sum(int [] nums,int from,int to)
        {
            int result = 0;
            for (int i=from;i<=to;i++)
            {
                result += nums[i];
            }
            return result;
        }

        static int Mul(int[] nums,int from,int to)
        {
            int result = 1;
            for (int i = from; i <= to; i++)
            {
                result *= nums[i];
            }
            return result;
        }

        static void Test()
        {
            int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            Console.WriteLine("求和"+ Sum(nums,0,2));
            Console.WriteLine("求积"+ Mul(nums,0,2));

        }

        static int Add2(int a, int b)
        {
            return a + b;
        }
        static int Multiply2(int a,int b)
        {
            return a * b;
        }

        static int Operation(Func<int,int,int> method,int[] nums,int from,int to)
        {
            int result = nums[from];
            for (int i = from+1; i <=to; i++)
            {
                result = method(result,nums[i]);
            }
            return result;
        }

        static void Test1()
        {
            int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            Console.WriteLine("方法作为参数:"+Operation(Add2,nums,0,2));
            Console.WriteLine("方法作为参数:" + Operation(Multiply2, nums, 0, 2));
        }

        //简化用lambda表达式
        static void Test2()
        {
            int[] nums = { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            Console.WriteLine("lambda表达式"+ Operation((a,b)=>a+b,nums,0,2));
            Console.WriteLine("lambda表达式"+Operation((a,b)=>a*b,nums,0,2));
        }

        static void Test3()
        {
            Action action = () => Console.WriteLine("你好!");
            action();
            Action<string> action1 = (str) => Console.WriteLine(str);
            action1("hello");
        }
}

综述。Lambda为了简化代码,或使用一次时方便。系统委托,减少声明,直接使用。自定义泛型,可以一次声明委托类型,通过变更T来变化参数类型。

*************************************《完》**************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值