委托是c#最重要的个性之一,c#前面所有的个性根本都是建设在委托的根底之上。
1.c#的委托是什么
c# 中的委托能够了解为函数的一个包装,C#中的函数已参数的形式进行传递,这绝对与C++中的函数指针。

委托的定义和办法的定义相似,在定义后面加上delegate关键字。
举例:

 class Program    {        delegate void RunCmd(); // 申明委托类型         static RunCmd runcmd1; // 申明委托对象变量        static RunCmd runcmd2; // 申明委托对象变量        static RunCmd runcmd3; // 申明委托对象变量        public static void RunCmdExecute()        {            Console.Write("execute");        }        public void RunCmdPause()        {            Console.Write("Puase");        }        static void Main(string[] args)        {            runcmd1 = new RunCmd(RunCmdExecute);//创立委托对象,静态方法            //runcmd1 = RunCmdExecute; // 快捷语法集体不倡议应用            runcmd1 = new RunCmd(new Program().RunCmdPause);//创立委托对象,实例办法            //runcmd1 += new Program().RunCmdPause; // 快捷语法            runcmd1(); // 留神只会输入最初一个“pause”            // 组合委托            runcmd1 = RunCmdExecute;            runcmd2 = new Program().RunCmdPause;            runcmd3 = runcmd1 + runcmd2;            runcmd3(); // 输入 “executePuase”            Console.Read();        }    }

委托的调用除了像办法(函数一样)还有一种是应用委托的Invoke办法。
举例:
runcmd1.Invoke(); //invoke翻译为征引(某人、某实践、实例等作为反对);
留神调用委托不能为空,否则会引发异样。

   if(runcmd1 != null)   {     runcmd1.Invoke();   }   runcmd1 ?.Invoke();//invoke和条件空运算符语法糖好用呢!

委托能包装的办法有肯定的限度

1)办法的后面和委托统一,包含参数个数,类型,程序。

2)办法的返回类型要和委托统一,办法的返回类型不属于办法签名的一部分。

2.为什么要引入委托
委托能够使得一个办法作为另一个办法的参数进行传递。

3.委托的实质
能够从IL代码中看到委托实质是类。

4.委托链
c#中的委托同样能够封装多个办法。c#把封装多个办法的委托成为委托链或多路播送委托,组合委托。
5.带有返回值的委托
留神:如果组合委托的话,只会返回最初一个办法的返回值。
6.带有援用参数的委托
和带援用的办法(函数)没差异。
7.匿名办法
匿名办法然咱们不须要应用独立的办法名

delegate void RunCmd(); // 申明委托类型 RunCmd runcmd4 = delegate () // 没有任何参数,或者没有应用任何参数()能够省略{    Console.Write("匿名办法");};runcmd4();

留神:匿名办法不会显示申明返回值。

8.Lambda示意式
Lambda运算符=>读作“goes to",这个运算符放在参数列表和函数主体之间。

RunCmd runcmd5 =  ()=>{    Console.Write("lambda");};runcmd5();

如果参数只有一个,并且是隐式类型则两端括号能够省略。