zoukankan      html  css  js  c++  java
  • Action 和 Func

    Func<T, TResult> 委托:有一个传入参数T,返回类型为TResult的委托。

    Func<T1, T2, TResult> 委托:有两个传入参数:T1T2,返回类型为TResult

    Func<T1, T2,...,Tn, TResult> 委托:有n传入参数:T1至Tn,返回类型为TResult

    Func都是有返回类型的,如果我们的方法没有返回类型该怎么办呢?这时Action就要闪亮登场了。

    匿名方法:

    Func<int, int, int> func = delegate(int m, int n)
    {
        return m + n;
    };
    int sum = func(1, 3);
    Console.WriteLine(sum);

    lambda 表达式

    Func<int, int, int> func = (m, n) => m + n;
    int sum = func(1, 3);
    Console.WriteLine(sum);

    Action 委托:没有传入参数,也没有返回类型,即Void。

    Action<T> 委托:传入参数为T,没有返回类型。

    Action<T1, T2> 委托:两个传入参数,分别为T1T2,没有返回类型。

    匿名方法:

    Action<int, int> action = delegate(int m, int n) // 无参 直接delegate
    {
        Console.WriteLine(m + n);
    };
    action(1, 3);

    Lambda表达式:

    Action<int, int> action = (m, n) => Console.WriteLine(m + n);
    action(1, 3);

    例子:

    class ActionFuncCls
        {
            private static void Add(int m, int n)
            {
                Console.WriteLine(m + n);
            }
    
            /// <summary>
            /// Action委托
            /// </summary>
            public static void CallAction()
            {
                ///@无参
                //Action action = () => Console.WriteLine("abc");
                //action();
    
                //@方法一
                //Action<int, int> action = new Action<int,int>(Add);
                //action(1, 3);
    
                //@方法二
                //Action<int, int> action = delegate(int m, int n) // 无参 直接delegate
                //{
                //    Console.WriteLine(m + n);
                //};
                //action(1, 3);
    
                //@方法三
                //Action<int, int> action = (int m, int n) => Console.WriteLine(m + n);
                Action<int, int> action = (m, n) => Console.WriteLine(m + n);
                action(1, 3);
            }
    
            /// <summary>
            /// Func 委托
            /// </summary>
            public static void CallFunc()
            {
                ///@无参
                //Func<int> func = () => 5;
                //int sum = func();
                //Console.WriteLine(sum);
    
                //@方法一
                //Func<int, int, int> func = new Func<int, int, int>(Add);
                //int sum = func(1, 3);
                //Console.WriteLine(sum);
    
                //@方法二
                //Func<int, int, int> func = delegate(int m, int n)
                //{
                //    return m + n;
                //};
                //int sum = func(1, 3);
                //Console.WriteLine(sum);
    
                //@方法三
                Func<int, int, int> func = (int m, int n) => m + n;
                //Func<int, int, int> func = (m, n) => m + n;
                int sum = func(1, 3);
                Console.WriteLine(sum);
            }
        }
  • 相关阅读:
    emacs 探索之六:latex中文支持
    One网络模拟器探索之六:Report类的扩展
    emacs 探索之五:latex配置
    emacs 探索之三:基本操作
    DataSet数据传送性能比较
    SQL 2008 附加数据库报5120的错误的解决办法
    软件工程师不可不知的10个概念
    在日期上加上相应天数,并在GridView上显示
    SQL 跨表更新
    SQLSERVER 处理两个日期相减
  • 原文地址:https://www.cnblogs.com/valor-xh/p/5940596.html
Copyright © 2011-2022 走看看