<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title>DongPad</title><link>http://www.dongpad.com</link> <description>Every day is a new beginning!</description><copyright>2.0 beta 03</copyright> <language>zh-cn</language><item><title>刘铁猛 - 深入浅出话委托</title><description><![CDATA[<SPAN class=Apple-style-span style="WORD-SPACING: 0px; FONT: 12px/18px verdana; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; TEXT-ALIGN: left; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0">
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">小序</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><?xml:namespace prefix = o /><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">好久不来更新</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Blog</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">了，一是因为工作比较忙，最重要的还是交了女朋友</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">:)</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">，太爱她了。回顾了一下前面写的文章，看来大家还是很喜欢我的灌水风格，那今天就来写一写最近被问到的最多的问题——委托与事件。并把本文献给支持我工作的兄弟姐妹们和我亲爱的女友（虽然你看不懂代码，嘻嘻）。说实话，论“深入”，就我这臭水平绝对深不到哪儿去，我尽量给大家讲明白就是了。如果内容上有什么闪失，麻烦兄弟姐妹们多拍几块砖——小弟正急着盖房子呢！</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">正文</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><o:p></o:p></SPAN></P>
<H3 style="PADDING-RIGHT: 0.6em; BACKGROUND-POSITION: 0% 0%; PADDING-LEFT: 0.6em; FONT-SIZE: 12px; BACKGROUND-IMAGE: url(http://hi.images.csdn.net/css/bloom/images/bg_notice.gif); PADDING-BOTTOM: 0.6em; MARGIN: 6px 0px 0px; PADDING-TOP: 0.6em; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: 'Microsoft yahei', verdana, sans-serif; TEXT-ALIGN: left; webkit-background-clip: initial; webkit-background-origin: initial" align=left><FONT size=5><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right">一．什么是委托（</SPAN><SPAN lang=EN-US style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right"><FONT face="Times New Roman">Delegate</FONT></SPAN><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right">）</SPAN></FONT></H3>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">先来点经典的解释——摘自</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">MSDN</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">A<SPAN class=Apple-converted-space> </SPAN><STRONG>delegate</STRONG><SPAN class=Apple-converted-space> </SPAN>is a<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: red">type</SPAN></FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">①</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman"><SPAN class=Apple-converted-space> </SPAN>that<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: red">references a metho</SPAN></FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">d</SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">②</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">. Once a delegate is assigned a method,<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: red">it behaves exactly like that metho</SPAN></FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">d</SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">③</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">. The delegate method can be used like any other method, with parameters and a return value.<o:p></o:p></FONT></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">我先把它译过来：委托（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Delegate</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">，也有人称之为“代理”）是一种<SPAN style="COLOR: red">数据类型</SPAN>，这种类型（的实例）<SPAN style="COLOR: red">引用着一个方法</SPAN>。一旦为一个委托分配（你可以理解为“挂接”）上一个方法，那么它的<SPAN style="COLOR: red">行为将与这个方法一致</SPAN>（挂接上就是为了调用这个方法，不一致我还挂个什么劲儿……原来老外也会说车轱辘话</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">:p</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">）。委托可以像任何方法一样使用，比如有或者没有参数，以及返回值等等。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">我给出一段例子，演示什么是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Delegate</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p><FONT face="Times New Roman"> </FONT></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">//=======</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">水之真谛出品</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">========<BR>//===http://blog.csdn.net/FantasiaX<BR>//===</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">上善若水，润物无声</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">=====<BR><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'MS Reference Sans Serif'">using</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN class=Apple-converted-space> </SPAN>System;<BR><SPAN style="COLOR: blue">using</SPAN><SPAN class=Apple-converted-space> </SPAN>System.Collections.Generic;<BR><SPAN style="COLOR: blue">using</SPAN><SPAN class=Apple-converted-space> </SPAN>System.Text;<BR><BR><SPAN style="COLOR: blue">namespace</SPAN><SPAN class=Apple-converted-space> </SPAN>DelegateSample<BR>{<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">地雷（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN>Blast(<SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemies)<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Console</SPAN>.WriteLine(<SPAN style="COLOR: maroon">"Killed {0} Japanese soldier(s)!!!"</SPAN>, enemies);<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN> <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN>  </SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">院子（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemiesInYard;<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine</SPAN><SPAN class=Apple-converted-space> </SPAN>mineInYard =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine</SPAN>();<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">绳子（委托）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">delegate</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>(<SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemies);<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">战士（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Soldier<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//</SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">一个战士可以控制三颗地雷（你可以尝试用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">ArrayList</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">，更爽）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>[] pullingStrings =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>[3];<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">主程序类</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Program<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">static</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN>Main(<SPAN style="COLOR: blue">string</SPAN>[] args)<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">三个院子</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN class=Apple-converted-space> </SPAN><SPAN lang=EN-US><BR></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfZhang =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>();<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfWang =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>();<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfLi =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>();<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">嘎子给地雷挂弦儿</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Soldier</SPAN><SPAN class=Apple-converted-space> </SPAN>gazi =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Soldier</SPAN>();<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[0] =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>(yardOfZhang.mineInYard.Blast);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[1] =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>(yardOfWang.mineInYard.Blast);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[2] =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>(yardOfLi.mineInYard.Blast);<BR><BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">鬼子来啦！老张家的院儿里有五个鬼子，老王家三个，老李家十个。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>yardOfZhang.enemiesInYard = 3;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>yardOfWang.enemiesInYard = 5;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>yardOfLi.enemiesInYard = 10;<BR><BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">嘎子拉弦儿了</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[0](yardOfZhang.enemiesInYard);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[1](yardOfWang.enemiesInYard);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.pullingStrings[2](yardOfLi.enemiesInYard);<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR>}<BR><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: 'MS Reference Sans Serif'"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">通过上面这个例子，我来说一句话，看看你能不能明白：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">委托就是一种机制，这种机制使得<SPAN style="COLOR: blue">从一个类（本例中是</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">Soldier</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">类）中调用其它类（本例中是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">Mine</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">类）中方法</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">变得简单而清晰。<SPAN style="COLOR: blue">降低了类与类之间的耦合度</SPAN>和程序设计的复杂程度（你可以试想一下，不使用委托，而把调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Mine</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Blast</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">方法直接写在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Soldier</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">类里，代码将是个什么情形……头大吧）。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">什么？不明白？没关系，我解释一下上面的代码：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">1．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">这段代码是用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Visual Studio 2005</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">写的，你可以建立一个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Console</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">项目，用上面的代码完全覆盖</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">VS</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">为你准备好的代码，按下</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Ctrl+F5</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">就可以执行了。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">2．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">地雷类：只包含一个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">public</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Blast</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">方法，这个方法要求一个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">int</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">型的参数。这个参数决定地雷炸死几个鬼子。<SPAN style="COLOR: blue">强调一下：</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">Blast</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">Mine</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">类中的一个方法，注意它的“签名”，是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">void</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">型返回值外加一个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">int</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">型参数。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">3．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">院子类：每个院子里埋了一颗铁西瓜，并且允许一定的小鬼子进来。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">4．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">绳子委托：这是本例的核心。战士想让地雷爆炸，有两种方法，一种是自己拿根香去点——前提是胆子足够大、捻儿足够长、跑的足够快——不过估计小鬼子不干；另一种是挂上一根发火弦儿（不见鬼子不挂弦儿吗</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">~~</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">），然后再那么一拉</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">~~</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">舌头就出来啦！</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Sorry!</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">是小鬼子就归西了。那么大家发现：绳子一头连着战士，另一头连着地雷的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Blast</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">这个方法，于是，战士拉绳子的动作与亲自去点火的效果就等价了（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: red"><FONT face="Times New Roman">it behaves exactly like that metho</FONT></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">d</SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">③</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">）。换句话说：战士把亲自点火这件事“委托”给了绳子去做——所以，绳子是一个“委托”的实例。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">5．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">战士类：一个战士手里可以拉着三根弦儿，我用一个数组表示的。因为</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Delegate</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">是可以进行加</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">/</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">减运算的（后面讲“多播委托”的时候会提到），所以在调用参数一致的方法时（本例的参数是不一致的，分别是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">3,5,10</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">），不用数组也行。<SPAN style="COLOR: blue">强调一下：就是这个战士类要调用地雷类中的方法——跨类的方法调用。</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">6．<SPAN style="FONT: 7pt 'Times New Roman'">  <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">主程序中第一块代码制造了三个院子，分别是老张、老王、老李家的院子。第二块代码是我们的主角张嘎子同学（由孙挺挺同学饰）登场……分别把手中的每根弦儿挂接在各个院子的地雷上。第三块代码——鬼子来啦！第四块代码，嘎子同学通过拉动自己手中的三根弦儿，完成了清场的任务。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<H3 style="PADDING-RIGHT: 0.6em; BACKGROUND-POSITION: 0% 0%; PADDING-LEFT: 0.6em; FONT-SIZE: 12px; BACKGROUND-IMAGE: url(http://hi.images.csdn.net/css/bloom/images/bg_notice.gif); PADDING-BOTTOM: 0.6em; MARGIN: 6px 0px 0px; PADDING-TOP: 0.6em; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: 'Microsoft yahei', verdana, sans-serif; TEXT-ALIGN: left; webkit-background-clip: initial; webkit-background-origin: initial" align=left><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right"><FONT size=5>二．委托的由来</FONT></SPAN></H3>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">看完上面这段代码，也许你会说：嗯，很简单吗……</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">是的，在有了委托之后的确非常简单。不过你可以试着不用委托来实现同样的功能——完全可以实现，但类与类之间的关系就会搅和在一起，变得骤然复杂起来。为了避免损失脑细胞，我就不给出例子了。那么也许大家会问：</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">C/C++</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">没有委托，那怎么办呢？呵呵，这个问题问的帅呆了！</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">C/C++</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">中是用函数指针和回调函数的方法来实现同样的功能的。因此，委托可以说是“</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">.NET</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">版的函数指针”，不过如果你不了解什么是函数指针那也没关系，你只需要记住委托是由</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">C/C++</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">中的函数指针发展而来的就可以了。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">在随后的日子里，我会给出一个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">C++</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">编写的、用函数指针实现的程序。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<H3 style="PADDING-RIGHT: 0.6em; BACKGROUND-POSITION: 0% 0%; PADDING-LEFT: 0.6em; FONT-SIZE: 12px; BACKGROUND-IMAGE: url(http://hi.images.csdn.net/css/bloom/images/bg_notice.gif); PADDING-BOTTOM: 0.6em; MARGIN: 6px 0px 0px; PADDING-TOP: 0.6em; BACKGROUND-REPEAT: no-repeat; FONT-FAMILY: 'Microsoft yahei', verdana, sans-serif; TEXT-ALIGN: left; webkit-background-clip: initial; webkit-background-origin: initial" align=left><FONT size=5><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right">三．</SPAN><FONT face="Times New Roman"></FONT><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right">升级！多播委托（</SPAN><SPAN lang=EN-US style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right"><FONT face="Times New Roman">Broadcast Delegate</FONT></SPAN><SPAN style="DISPLAY: block; FONT: 12px verdana, sans-serif; TEXT-ALIGN: right">）</SPAN></FONT></H3>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">        <SPAN class=Apple-converted-space> </SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如果说委托仅仅是函数指针的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">.NET</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">版，那可就真没多大意思了——微软当然没那么傻！实际上，委托较之函数指针有了很多改进，其中最实用也是最酷的一点就是：委托是“多播”的，而函数指针是“单播”的。换句话说：委托是“一对多的”，即一个委托上可以挂接好几个与之签名相同的函数；而函数指针只能“一对一”，即一个函数指针只能指向一个函数。为了说明这点，我把第一个例子进行了改进——改动比较大，而且很多操作移动到了各个类的构造函数中（模拟</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">VS2005</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">为我们生成的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">WinForm</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">程序）。<SPAN style="COLOR: blue">顺便给大家一个小小的建议：虽然我给出的例子</SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: blue"><FONT face="Times New Roman">Copy</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">过去就能执行，我还希望大家能自己动手敲一敲代码，这样会有很多意想不到的收获</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">//=======</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">水之真谛出品</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">========<BR>//===http://blog.csdn.net/FantasiaX<BR>//===</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">上善若水，润物无声</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">=====<BR><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'MS Reference Sans Serif'">using</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN class=Apple-converted-space> </SPAN>System;<BR><SPAN style="COLOR: blue">using</SPAN><SPAN class=Apple-converted-space> </SPAN>System.Collections.Generic;<BR><SPAN style="COLOR: blue">using</SPAN><SPAN class=Apple-converted-space> </SPAN>System.Text;<BR><BR><SPAN style="COLOR: blue">namespace</SPAN><SPAN class=Apple-converted-space> </SPAN>DelegateSample<BR>{<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">绳子（委托）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">delegate</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>();<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">地雷（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">private</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemiesInScope;<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN><SPAN class=Apple-converted-space> </SPAN>stringOfMine;<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN>Mine(<SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemisInYard)<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>         <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN>  </SPAN>enemiesInScope = enemisInYard;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>stringOfMine =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN>(Blast);<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN>Blast()<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Console</SPAN>.WriteLine(<SPAN style="COLOR: maroon">"Killed {0} Japanese soldier(s)!!!"</SPAN>, enemiesInScope);<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">院子（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">private</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemiesInYard;<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine</SPAN><SPAN class=Apple-converted-space> </SPAN>mineInYard;<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN>Yard(<SPAN style="COLOR: blue">int</SPAN><SPAN class=Apple-converted-space> </SPAN>enemies)<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>enemiesInYard = enemies;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>mineInYard =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Mine</SPAN>(enemiesInYard);<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">战士（类）</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Soldier<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">public</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">PullingString</SPAN><SPAN class=Apple-converted-space> </SPAN>mainString;<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">主程序类</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">class</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Program<BR></SPAN><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: blue">static</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">void</SPAN><SPAN class=Apple-converted-space> </SPAN>Main(<SPAN style="COLOR: blue">string</SPAN>[] args)<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>{<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">三个院子，老张家的院儿里有五个鬼子，老王家三个，老李家十个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfZhang =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>(3);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfWang =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>(1);<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Yard</SPAN><SPAN class=Apple-converted-space> </SPAN>yardOfLi =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Yard</SPAN>(10);<BR><BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">把地雷上的绳子都接到嘎子手中的绳子上</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'">,<SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">这里用到了多播</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: teal">Soldier</SPAN><SPAN class=Apple-converted-space> </SPAN>gazi =<SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: blue">new</SPAN><SPAN class=Apple-converted-space> </SPAN><SPAN style="COLOR: teal">Soldier</SPAN>();<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.mainString += yardOfZhang.mineInYard.stringOfMine;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.mainString += yardOfWang.mineInYard.stringOfMine;<BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.mainString += yardOfLi.mineInYard.stringOfMine;<BR><BR><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN><SPAN style="COLOR: green">//<SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体">嘎子拉弦儿了</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'MS Reference Sans Serif'"><BR></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>           <SPAN class=Apple-converted-space> </SPAN></SPAN>gazi.mainString();<BR><SPAN>       <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR><SPAN>   <SPAN class=Apple-converted-space> </SPAN></SPAN>}<BR>}<BR><SPAN>     <SPAN class=Apple-converted-space> </SPAN></SPAN>OK</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，我再把上面这段代码仔细解释一遍。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><SPAN>1．<SPAN style="FONT: 7pt 'Times New Roman'">   <SPAN class=Apple-converted-space> </SPAN></SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">这次的绳子委托与上一次的不一样——是无参的。因为没有参数，所以调用起来形式是“统一”的，适用于多播委托。不过这里要提醒大家一点：“统一”并不一定非得是“无参”，比如在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">WinForm</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">程序中，用于建立控件事件的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">EventHandler</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">委托，它是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">2</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">个参数，分别是</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">object</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">型的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">sender</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">和</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">EventArg</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">型的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">e</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，（与之匹配的事件处理函数也都具有这样的两个参数），这也算“统一”。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">2．<SPAN style="FONT: 7pt 'Times New Roman'">    <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">地雷类：这次的地雷是改进型的。最大的特点就是，本身就已经带了一根绳（绳子委托的实例）并且暴露给使用者。还有，地雷的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">Blast()</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">方法改成了无参的——与绳子委托匹配。杀伤数目已经变成了</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'MS Reference Sans Serif'">private</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">，并于构造函数处初始化。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">3．<SPAN style="FONT: 7pt 'Times New Roman'">    <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">院子数：变化不大，但在构造函数处初始化了院子里的地雷实例。<SPAN style="COLOR: blue">像这种在构造函数中初始化成员变量的方法，在程序设计中是很常用的</SPAN>。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">4．<SPAN style="FONT: 7pt 'Times New Roman'">    <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">战士类：变化很大，不再是拿着</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">3</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根绳子，而是只拿着一根绳子。只要把地雷上的绳子接到手里的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">1</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根绳子上，然后一拉……呵呵，跟拉</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">3</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根绳子的效果没有任何区别。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">5．<SPAN style="FONT: 7pt 'Times New Roman'">    <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">进入主程序，你会发现：因为把很多操作交给了类自己的构造函数，所以主程序显得简洁轻快多了。第</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">1</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">块代码是生成</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">3</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">个院子。第</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">2</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">块代码是本程序的核心——多播委托——注意到委托可以使用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">+=</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">这个操作符了吗？</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">+=</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">操作符可以把签名相同的一组委托合并到一起（相反，</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">-=</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">操作符会移除不想要的委托），这是函数指针所不具有的功能。最后一句代码，拉</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">1</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根绳子就相当于拉</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">3</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根地雷上的绳子。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px"><SPAN lang=EN-US style="FONT-SIZE: 9pt"><SPAN><FONT face="Times New Roman">6．<SPAN style="FONT: 7pt 'Times New Roman'">    <SPAN class=Apple-converted-space> </SPAN></SPAN></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">请大家仔细看</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">+=</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">这段代码，并感受这一点：程序开发过程中，有两种程序员，一种是开发类库（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Class Library</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">）和基础架构（</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Framework</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">）的，一种是使用类库编写目标程序的。类库开发人员开发完类库后，一般是将编译好的、包含类的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">DLL</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件提供给写目标程序的人员——换句话说就是写目标程序的程序员既不能看到类的源代码、也不可能改动类的源代码。假设没有委托这种机制，那么每添加一次类与类之间的交互，就要改动一次类的代码并编译一次。解决的办法是，要么写类库和写目标程序的是同一个人（这样写不出大程序来），要么写类库的人员与写目标程序的人员进行极频繁的沟通和版本维护（出</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><FONT face="Times New Roman">Bug</FONT></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的可能性极高）……而且有一个问题不可能避免，就是你的程序变成一锅炸酱面（类与类之间的耦合关系太密切、代码绞缠在一起的结果）。<SPAN style="COLOR: blue">而委托的存在，使得类与类之间的交互独立于类代码之外，解决了以上的所有问题</SPAN>。</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p><FONT face="Times New Roman"> </FONT></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; TEXT-ALIGN: left" align=left><SPAN lang=EN-US style="FONT-SIZE: 9pt"><o:p><FONT face="Times New Roman"> </FONT></o:p></SPAN></P>
<P class=MsoNormal style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; COLOR: rgb(68,68,68); TEXT-INDENT: 2em; LINE-HEIGHT: 22px; PADDING-TOP: 0px; BACKGROUND-COLOR: white; TEXT-ALIGN: left; webkit-background-clip: initial; webkit-background-origin: initial" align=left><STRONG><SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 宋体">法律声明：</SPAN></STRONG><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">本文章受到知识产权法保护，任何单位或个人若需要转载此文，必需保证文章的完整性（未经作者许可的任何删节或改动将视为侵权行为）。若您需要转载，请务必注明文章出处为</SPAN><STRONG><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Verdana">CSDN</SPAN></STRONG><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">以保障网站的权益；请务必注明文章作者为</SPAN><STRONG><SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 宋体">刘铁猛</SPAN></STRONG><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">，并向</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"><A style="COLOR: rgb(0,102,153); TEXT-DECORATION: none" href="mailto:bladey@tom.com"><SPAN style="TEXT-DECORATION: none">bladey@tom.com</SPAN></A></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体">发送邮件，标明文章位置及用途。转载时请将此法律声明一并转载，谢谢！</SPAN></P></SPAN>
Trackback:http://blog.csdn.net/fantasiax/archive/2006/06/13/793623.aspx]]></description><author>Jack</author><link>http://www.dongpad.com/CSharp-20081126-120.html</link><pubdate>2008-11-26 16:34:07</pubdate></item></channel></rss>
