zoukankan      html  css  js  c++  java
  • 定义一个委托的三种形式

    今天是2012年的最后一天,外面天气又冷,不想出门,在家闲着无聊,找了本书看看,随便翻了翻,下面跟大家分享一下,我的看书成果。

    随手一翻,看到了委托这一章节。

    委托这是一个非常有用,也非常重要的东东,用过的人一定深有体会。今天谈谈委托的三种定义形式,可能有点人会认为,声明委托不就是用:Delegate关键吗?我在今天以前也是这么认为的,但是ton通过 今天的看书,我了解到,其实在C#中声明委托不一定要用Delegate,还可以用Action<T>和Func<T>委托,下面我就一一为大家分享一哈,这两种泛型到底是怎么来什么委托的。

    第一种申明委托的方式:

    Delegate

    这时大家最常用的,也是最原始的,我想大家肯定都很熟悉,我就直接上个例子吧:

      delegate int DoubleOP(int value);

    用起来也很简单,就像Class一样使用就OK了

    第二种申明委托的方式:

    Action<T>

    泛型Action<t>委托表示引用一个void返回类型的方法,因为这个委托存在不同的变体,所以可以传递最多16个不同的参数类型,没有泛型参数的Action类可以调用没有参数的方法,Action<in T>调用带一个参数的方法,Action<in T1,in T2>调用带两个参数的方法,以此类推Action<in T1,in T2,.....,in T16>调用带16个参数的方法。例如:

        //定义类,将调用的方法
        class MathOperationsAction
        {
            public static void Method1()
            {
               
            }
    
            public static void Method2(int i)
            {
               
            }
    
            public static void Method3(int a,string b,double c,float d)
            {
                
            }
        }
            //指定委托
            static Action operationAction1 = MathOperationsAction.Method1;
            static Action<int> operationAciont2 = MathOperationsAction.Method2;
            static Action<int, string, double, float> operationAction3 = MathOperationsAction.Method3;
                //使用委托
                if (operationAction1 == null)
                { }
                operationAciont2(10);
                operationAction3(10, "zhangwei", 12.23, 45);

    例子很简单,大家如果感兴趣可以自己动手是一把。
    第三种申明委托的形式:

    Func<T>

    Func<T>允许调用带返回类型的方法,与Action<T>类似,Func<T>也定义了不同的变体,至多可以传递16个参数类型和一个返回类型,Func<in T,out TReslut>调用带一参数的方法,

    Func<in T1,in T2,out TResult>调用带两个参数的方法,以此类推Action<in T1,in T2,.....,in T16,out TResult>调用带16个参数的方法,例如:

        //定义类,将调用的方法
        class MathOperations
        { 
            public static double MultiplyByTwo(double value)
            {
                return value * 2;
            }
    
            public static int Square(int value)
            {
                return value * value;
            }
        }
            //指定委托
            static Func<double, double> func1 =MathOperations.MultiplyByTwo;
    
            static Func<int, int> func2 = MathOperations.Square;
                //使用委托
                double result = func1(23.33);
                int value = func2(123);

    以上就是我所理解的声明委托的三种方式。

    分享是一种快乐,也是一种美德,我也需要大家与我共同分享。

    对WPF感兴趣的朋友可以直接跟我联系
    我个人QQ:1791786556
    讨论QQ群:
    WPF学习交流:699150554
    WPF/UI 界面开发:527847154
    WPF控件编程:699191787
  • 相关阅读:
    如何正确设置数据库连接池的大小
    spring生命周期
    Spring高级进阶:BeanFactoryPostProcessor
    Spring Bean的生命周期(非常详细)
    表达式求值相关算法
    golang 命令行参数解析 hflag
    golang 标准命令行解析库 flag
    docker consul 环境搭建
    docker etcd 环境搭建
    mysql 事务
  • 原文地址:https://www.cnblogs.com/zwzw/p/2840499.html
Copyright © 2011-2022 走看看