委托入门

委托

1.       什么是委托

     MSDN:委托是一种引用方法的类型,一旦为委托分配了方法,该委托与方法具有相同的行为.委托的使用和其他方法一样具有参数列表和返回值

 

  个人理解:

  委托是一种封装方法的 ,如果该委托于某方法方法具有相同的签名和参数列表,则可以用委托实现该方法的功能,委托的实例可以代表具体的函数。

namespace DelDemo

{

    public class Eat

    {

       public delegate void Del(string str); //和下面定义的函数具有相同的签名和返回值

       public void zsEat(string food)

       {

           Console.WriteLine("张三"+food);

       }

      

       static void Main()

       {

           Eat zs=new Eat();

           //zsEat.zsEat("西瓜");          可以通过这么调用也可以实现

           Del d=new Del(zs.zsEat);       //运用委托进行调用

           d("西瓜");     

       }

    }

}

2.       异步回调(callback)

CodeProject: c# delegate is a callback function

异步回调的过程就是在一个方法里声明一个委托类型,然后通过这个委托类型去调用另一个方法

using  System;

namespace DelDemo

{

    public class Eat

    {

       public delegate void Del(string str);

       public void zsEat(string food)

       {

           Console.WriteLine("张三吃"+food);

       }

       public void lsEat(string food)

       {

           Console.WriteLine("李四吃"+food);

       }

      

       public static void AllEat(string food,Del del)

       {

           del(food);               //从一个方法中去调用另一个方法

       }

       static void Main()

       {

       Eat eat=new Eat();

       AllEat("西瓜",eat.zsEat);        //委托是一个方法的 ,所以可以把的实例传给 委托这个类 其实委托在编译的时候就是编译成一个类

      AllEat("葡萄",eat.lsEat);

      

       }

    }

}

3.       多播委托

委托可以适用  “+””-” 进行多播委托,这里的加减符号是在委托这类中重载的

C#提供了c++中的重载符号的方法,这样省去了不少代码,特别是代码量多的时候

using  System;

namespace DelDemo

{

    public class Eat

    {

       public delegate void Del(string str);

       public void zsEat(string food)

       {

           Console.WriteLine("张三吃"+food);

       }

       public void lsEat(string food)

       {

           Console.WriteLine("李四吃"+food);

       }

       public void wwEat(string food)

       {

           Console.WriteLine("王五吃"+food);

       }

 

       static void Main()

       {

       Eat eat=new Eat();

       Del d1=eat.zsEat;

       Del d2=eat.lsEat;

       Del d3=eat.wwEat;

      

       Del d=d1+d2+d3;       //委托可以相加的

       d("西瓜");

       Console.WriteLine("李四接电话!!!");

           Del del=d-d2;         //委托相减

           del("葡萄");

           Console.WriteLine("李四回来了!!!");

           Del Alldel=del+d2;

           Alldel("牛肉");

       }

    }

}

 

posted @ 2009-09-18 13:40  fox_ice  阅读(125)  评论(0)    收藏  举报