定義一個委托的三種形式


今天是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);

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

分享是一種快樂,也是一種美德,我也需要大家與我共同分享。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM