好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Delegate,Action<T>和Func<T>

Delegate,Action<T>和Func<T>

定义一个委托的三种形式

2012-12-31 13:17 by zhang carl, 131 阅读,  1  评论,  收藏 ,  编辑

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

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

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

 

分类:  程序人生 ,  心得体会 ,  语言编程(C#)

标签:  C#、委托、Delegate、Action、Func

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Delegate,Action<T>和Func<T>的详细内容...

  阅读:30次