美高梅59599C#委托的介绍(delegate、Action、Func、predicate)

美高梅59599C#委托的介绍(delegate、Action、Func、predicate)

转自(http://www.cnblogs.com/zhangchenliang/p/4968779.html

C#委托的介绍(delegate、Action、Func、predicate)

 

  委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。

  1.委托的声明

  1.委托的声明

  (1). delegate

  (1). delegate

        delegate我们常用到的一种声明

        delegate我们常用到的一种声明

    Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

  
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

   
例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。

   例:public delegate int MethodtDelegate(int x, int
y);表示有两个参数,并返回int型。

  (2). Action

  (2). Action

       Action是无返回值的泛型委托。

       Action是无返回值的泛型委托。

   Action 表示无参,无返回值的委托

   Action 表示无参,无返回值的委托

   Action<int,string> 表示有传入参数int,string无返回值的委托

   Action<int,string> 表示有传入参数int,string无返回值的委托

   Action<int,string,bool>
表示有传入参数int,string,bool无返回值的委托

  Action<int,string,bool>
表示有传入参数int,string,bool无返回值的委托

       Action<int,int,int,int>
表示有传入4个int型参数,无返回值的委托

       Action<int,int,int,int>
表示有传入4个int型参数,无返回值的委托

   Action至少0个参数,至多16个参数,无返回值。

   Action至少0个参数,至多16个参数,无返回值。

   例:

   例:

        public void Test<T>(Action<T> action,T p)
        {
            action(p);
        }
        public void Test<T>(Action<T> action,T p)
        {
            action(p);
        }

    (3). Func

    (3). Func

   Func是有返回值的泛型委托

   Func是有返回值的泛型委托

   Func<int> 表示无参,返回值为int的委托

   Func<int> 表示无参,返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string
返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string
返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string
返回值为int的委托

   Func<object,string,int> 表示传入参数为object, string
返回值为int的委托

   Func<T1,T2,,T3,int>
表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

   Func<T1,T2,,T3,int>
表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

  
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

  
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

      例:   

      例:   

        public int Test<T1,T2>(Func<T1,T2,int>func,T1 a,T2 b)
        {
            return func(a, b);
        }
        public int Test<T1,T2>(Func<T1,T2,int>func,T1 a,T2 b)
        {
            return func(a, b);
        }

    (4) .predicate

    (4) .predicate

   predicate 是返回bool型的泛型委托

   predicate 是返回bool型的泛型委托

   predicate<int> 表示传入参数为int 返回bool的委托

   predicate<int> 表示传入参数为int 返回bool的委托

   Predicate有且只有一个参数,返回值固定为bool

   Predicate有且只有一个参数,返回值固定为bool

   例:public delegate bool Predicate<T> (T obj)

   例:public delegate bool Predicate<T> (T obj)

  

 2.委托的使用

  2.委托的使用

(1).Delegate的使用  

  (1).Delegate的使用  

 

public delegate int MethodDelegate(int x, int y);
        private static MethodDelegate method;
        static void Main(string[] args)
        {
            method = new MethodDelegate(Add);
            Console.WriteLine(method(10,20));
            Console.ReadKey();
        }

        private static int Add(int x, int y)
        {
            return x + y;
        }
        public delegate int MethodDelegate(int x, int y);
        private static MethodDelegate method;
        static void Main(string[] args)
        {
            method = new MethodDelegate(Add);
            Console.WriteLine(method(10,20));
            Console.ReadKey();
        }

        private static int Add(int x, int y)
        {
            return x + y;
        }

(2).Action的使用

 

static void Main(string[] args)
        {
            Test<string>(Action,"Hello World!");
            Test<int>(Action, 1000);
            Test<string>(p => { Console.WriteLine("{0}", p); }, "Hello World");//使用Lambda表达式定义委托
            Console.ReadKey();
        }
        public static void Test<T>(Action<T> action, T p)
        {
            action(p);
        }
        private static void Action(string s)
        {
            Console.WriteLine(s);
        }
        private static void Action(int s)
        {
            Console.WriteLine(s);
        }

  (2).Action的使用   

(3).Func的使用

admin

网站地图xml地图