首页 > 代码库 > 委托到底是什么?

委托到底是什么?

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

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

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

         

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;

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

 

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





委托到底是什么?