委托
什么是委托:我认为的委托是,如果我想去买菜,那么我让一个人去帮我买菜。在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 方法,这个发动机就可以被用在所有需要发动机的地方了。而你每次要在新的地方用这个发动机时, 也不必去修改发动机的代码了。

浙公网安备 33010602011771号