C#委托、泛型委托

一、一个委托是一个指向一个方法的引用,或者说,一个委托的实例就是一个指向某个方法的对象,这是一个简单却十分强大的概念。 

有参数的方法中,我们把另一个方法当作参数传进来,那么这个方法的类型就是委托类型。

委托所指向的函数必须跟委托具有相同的签名;我们可以把一个函数赋值给委托,前提是这个函数的签名必须跟委托是一样的

1.声明委托的关键词是delegate

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

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

 class Program
{
       //声明一个委托指向相同签名的2个函数SayHiChinese,SayHiEnglish
        public delegate void DelSayHi(string name);
        static void Main(string[] args)
        {
            SayHi("张三",SayHiChinese);//把函数当成参数直接传进来
            Console.ReadKey();
            //另一种调用方式,这种情况可以不用写SayHi函数了
            DelSayHi del=SayHiChinese;
            Del(“张三”);
            Console.ReadKey();
            //第三种方法,可以使用匿名函数,匿名函数的签名也要跟委托一样

            DelSayHi del = delegate (string name){ Console.WriteLine("你好" + name); };     
            //第四种方法lamda表达式  => goes to
            DelSayHi del = (string name) => { Console.WriteLine("你好" + name); };
            del("张三");
            Console.ReadKey();

  }
        public static void SayHi(string name, DelSayHi del)//委托类型的参数就是函数
        {
            del(name);
        }
        public static void SayHiChinese(string name)
        {
            Console.WriteLine("你好" + name);
        }
        public static void SayHiEnglish(string name)
        {
            Console.WriteLine("Hello" + name);
        }
    }

二、泛型委托

(1). Func      

        Func是有返回值的泛型委托

   Func<int> 表示无参,返回值为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至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

Func<int, int> func = (a) => { return a; };
Console.WriteLine(func(8));

//输出:8

(2). Action

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

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

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

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

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

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

Action<string> act = (a) => Console.WriteLine("hello world"+a);
act("北京");
//输出:hello world 北京

 (3) .predicate

   predicate 是返回bool型的泛型委托

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

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

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

  

原文地址:https://www.cnblogs.com/qingheshiguang/p/14218064.html