zoukankan      html  css  js  c++  java
  • Func委托

    1. 无参有返回值

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                //1. 通过New关键字实例化,使用Invoke方法调用
                Func<int> fun1 = new Func<int>(FunWithNoPara);
                int result1 = fun1.Invoke();
                Console.WriteLine(result1);
    
                //2. 直接将方法赋值,当做普通方法方式调用
                Func<int> fun2 = FunWithNoPara;
                int result2 = fun2();
                Console.WriteLine(result2);
    
                //3. 使用匿名函数
                Func<int> fun3 = delegate() { return 10; };
                int result3 = fun3();
                Console.WriteLine(result3);
    
                //4. Lambda表达式(推荐)
                Func<int> fun4 = () => 10;
                int result4 = fun4();
                Console.WriteLine(result4);
                Console.ReadLine();
            }
    
            public static int FunWithNoPara()
            {
                return 10;
            }
        }
    }
    View Code

    2. 一个参数有返回值

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                //1. 通过New关键字实例化,使用Invoke方法调用
                Func<int, int> fun1 = new Func<int, int>(FunWithPara);
                int result1 = fun1.Invoke(1);
                Console.WriteLine(result1);
    
                //2. 直接将方法赋值给委托,当做普通方法调用
                Func<int, int> fun2 = new Func<int, int>(FunWithPara);
                int result2 = fun2.Invoke(1);
                Console.WriteLine(result2);
    
                //3. 使用匿名函数
                Func<int, int> fun3 = delegate(int p) { return p; };
                int result3 = fun3(1);
                Console.WriteLine(result3);
    
                //4. Lambda表达式
                Func<int, int> fun4 = p => p;
                int result4 = fun4(1);
                Console.WriteLine(result4);
                Console.ReadLine();
            }
    
            static int FunWithPara(int i)
            {
                return i;
            }
        }
    }
    View Code

    3. 多个参数有返回值

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        //定义委托
        class Program
        {
            static void Main(string[] args)
            {
                //1. 通过New关键字实例化,使用Invoke方法调用
                Func<int, string, bool> fun1 = new Func<int, string, bool>(FunWithMultiPara);
                bool result1 = fun1.Invoke(2, "abc");
                Console.WriteLine(result1);
    
                //2. 直接赋值,普通方法调用
                Func<int, string, bool> fun2 = FunWithMultiPara;
                bool result2 = fun1.Invoke(2, "2");
                Console.WriteLine(result1);
    
                //3. 使用匿名函数
                Func<int, string, bool> fun3 = delegate(int p, string q) { return p.ToString().Equals(q) ? true : false; };
                bool result3 = fun3(1, "1");
                Console.WriteLine(result2);
    
                //4. Lambda表达式
                Func<int, string, bool> fun4 = (p, q) =>
                {
                    return p.ToString().Equals(q) ? true : false;
                };
                bool result4 = fun4(1, "ed");
                Console.WriteLine(result3);
                Console.ReadLine();
            }
    
            static bool FunWithMultiPara(int i, string s)
            {
                return i.ToString().Equals(s) ? true : false;
            }
        }
    }
    View Code

     4. 委托当做方法参数

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine(Test<int, int>(Fun, 100, 200));
                Console.ReadKey();
            }
    
            public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b)
            {
                return func(a, b);
            }
            private static int Fun(int a, int b)
            {
                return a + b;
            }
        }
    }
    View Code
  • 相关阅读:
    c# XML和实体类之间相互转换(序列化和反序列化)
    反序列化-通过创建Class对象及属性
    .net C#中页面之间传值传参的六种方法
    C#对XML、JSON等格式的解析
    c#大圣之路笔记——c# DataGrid checkbox 操作
    python(十五)
    python(十四)
    python(十三)
    python(十二)
    python(十一)
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12888327.html
Copyright © 2011-2022 走看看