委托到底是什么?

来源:互联网 发布:复旦软件工程硕士 编辑:程序博客网 时间:2024/05/29 09:05

         说到委托,大多数的编程人员可能都听说过,甚至用过,可是能把委托说明白,别人也能听明白的就不多了吧。这篇文章就由浅入深的介绍一下,委托到底是什么。

        委托是面向对象的标志,面向对象来源于现实世界,当然委托在现实世界中也是有原型的,比如:“小明,帮我买包烟”。这就是现实中的委托:‘我’委托小明‘买饭’。

        面向对象是如何实现的呢?先来看一下委托的定义:

         

public delegate void   BuyFoodEventHandler();

         public代表委托是公有的,可访问的;delegate是委托的关键字;void是委托的返回值类型;BuyFoodEventHandler是委托的名称,其中EventHandler微软公司规定的命名标准,方法名称加上后缀就是委托名称。

       好了,这就是一个委托。我们把它和方法比较一下,它和方法的不同点就是:1委托需要关键字标识;2委托名称需要以EventHandler结尾;3委托没有方法体;4委托的返回值类型和委托方法的返回值类型一致。

        接下来,我们使用代码来实现委托小明买烟这个过程。

<span style="font-size:18px;">public class Program    {        //定义委托        public delegate void BuyEventhandler();        public static void Main(string[] args)        {            //声明委托,委托的方法            BuyEventhandler myDelegate = new BuyEventhandler(XiaoMing.BuyCigarette);            myDelegate += XiaoHong.BuyWater;            //委托方法的实现            myDelegate();            Console.ReadKey();        }    }       public class XiaoMing     {      //买烟的方法        public static void BuyCigarette()        {            Console.WriteLine("吸烟有害健康!");        }    }</span>
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyCigarate);这句话是委托的声明;括号内是委托的方法,这个方法一定要写,因为它属于委托的构造函数体,构造函数不能为空;

          

         如果再让小红买一瓶水,如何实现呢?委托链可以解决这个问题,下面是委托链的介绍:

<span style="font-size:18px;">public class Program    {        //定义委托        public delegate void BuyEventhandler();        public static void Main(string[] args)        {            //声明委托,委托的方法            BuyEventhandler myDelegate = newBuyEventhandler(XiaoMing.BuyCigarette);            myDelegate += XiaoHong.BuyWater;            //委托方法的实现            myDelegate();            Console.ReadKey();        }    }    public classXiaoMing    {                 //买烟的方法        public static void BuyCigarette()        {           Console.WriteLine("吸烟有害健康!");        }    }  public classXiaoHong    {                 //买水的方法        public static void BuyWater()        {           Console.WriteLine("买个水都让我去,真懒!");        }    }</span>

 

        其实,我们只是在程序中加了 myDelegate += XiaoHong.BuyWater;

;这样就构成了委托链,实现了一个委托可以实现多个方法。

 

         这里总结一下,委托其实就是方法的指针,可以把方法当做参数来使用,这样可以大大的增加程序的灵活性和可扩展性。





0 0
原创粉丝点击