深入浅出话委托
小序
好久不来更新Blog了,一是因为工作比较忙,最重要的还是交了女朋友:),太爱她了。回顾了一下前面写的文章,看来大家还是很喜欢我的灌水风格,那今天就来写一写最近被问到的最多的问题——委托与事件。并把本文献给支持我工作的兄弟姐妹们和我亲爱的女友(虽然你看不懂代码,嘻嘻)。说实话,论“深入”,就我这臭水平绝对深不到哪儿去,我尽量给大家讲明白就是了。如果内容上有什么闪失,麻烦兄弟姐妹们多拍几块砖——小弟正急着盖房子呢!
正文
一.什么是委托(Delegate)
先来点经典的解释——摘自MSDN:A delegate is a type① that references a method②. Once a delegate is assigned a method, it behaves exactly like that method③. The delegate method can be used like any other method, with parameters and a return value.
我先把它译过来:委托(Delegate,也有人称之为“代理”)是一种数据类型,这种类型(的实例)引用着一个方法。一旦为一个委托分配(你可以理解为“挂接”)上一个方法,那么它的行为将与这个方法一致(挂接上就是为了调用这个方法,不一致我还挂个什么劲儿……原来老外也会说车轱辘话:p)。委托可以像任何方法一样使用,比如有或者没有参数,以及返回值等等。
我给出一段例子,演示什么是Delegate。
//=======水之真谛出品========
//===http://blog.csdn.net/FantasiaX
//===上善若水,润物无声=====
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegateSample
{
// 地雷(类)
class Mine
{
public void Blast(int enemies)
{
Console.WriteLine("Killed {0} Japanese soldier(s)!!!", enemies);
}
}
// 院子(类)
class Yard
{
public int enemiesInYard;
public Mine mineInYard = new Mine();
}
// 绳子(委托)
public delegate void PullingString(int enemies);
// 战士(类)
class Soldier
{
//一个战士可以控制三颗地雷(你可以尝试用ArrayList,更爽)<