委托

什么是委托:我认为的委托是,如果我想去买菜,那么我让一个人去帮我买菜。在C#中委托时一种类型,属于引用类型,用delegate定义一个委托。委托的定义与类的定义是一样,所以说能定义类的地方就可以定义委托。下面我定义一个简单的委托,public delegate void MyDelegate();这是一个无参数的,无返回值的委托。
 1 class Program
 2  2 {
 3  3     public delegate void MyDelegate();
 4  4     static void Main(string[] args)
 5  5     {
 6  6         MyDelegate myMessage = new MyDelegate(MyMethod);
 7  7         myMessage();
 8  8         Console.ReadLine();
 9  9     }
10 10     public static void MyMethod()
11 11     {
12 12         Console.WriteLine("我是通过委托调用的");
13 13     }
14 14 }
基本构成

 从基本构成这个函数我们新建了一个无返回值,无参数的委托MyDelegate,同时新建了一个方法MyMethod,创建了一个委托的对象myMessage;同时传入一个无参数的方法函数,最后调用这个委托对象。

为什么要使用委托呢?

  使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的。比如你有一个发动机类, 这个类提供动力,可以被用于汽车、电钻等等。 但当发动机转动时,汽车类向前走, 电钻类旋转,所有这些消费者的行为都可能不同 那你这个发动机类怎么定义呢? 不能把汽车、电钻等等的运行代码都放到发动机里吧, 那发动机的代码会非常庞大, 而且功能总是被限定在有限的几个方面。  用委托可以解决这个问题, 在发动机转动时不是调用发动机的某一个方法, 而是调用发动机的一个委托类型的成员。 这样我们在汽车类里将发动机的这个委托型成员指定为汽车的 Move 方法, 在电钻里将其指定为电钻类的 Drill 方法,这个发动机就可以被用在所有需要发动机的地方了。而你每次要在新的地方用这个发动机时, 也不必去修改发动机的代码了。

posted @ 2017-09-28 16:47  你好水  阅读(152)  评论(0)    收藏  举报