[大话.net]纪念918之张嘎子炸鬼子——委托

        下午上班时,听见窗外高昂的防空警报声。再次醒悟到今天可是9.18,国耻日。历史不能忘记啊……
        正在看MSDN2005的章节,正是委托的章节,看了那个计算图书馆中平装平均书价格的例子,理解一番之后,就想自己也试着来一个。以前在别人的博客上也看到过张嘎子炸鬼子的例子,当时囫囵吞枣,没有仔细理解。今天算是基本理解委托的意义了,于是按自己的理解也来了个张嘎子炸鬼子的示例,顺便纪念一下9.18了。


       假定鬼子在我抗日根据地扫荡,我英勇的人民奋勇反击,使用了地雷战的战术,炸得鬼子魂飞胆战。电影的一幕假定这样的:游击队员张嘎子在张家院子里埋下了地雷,几个鬼子进入了院子,埋伏在远处的张嘎子一拉弦,鬼子也就格屁了。

       我们需要三个角色(类):
       1、院子

[大话.net]纪念918之张嘎子炸鬼子——委托//院子
[大话.net]纪念918之张嘎子炸鬼子——委托
    class yard
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托    
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托        
//院子名
[大话.net]纪念918之张嘎子炸鬼子——委托
        public string yardName;
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
//地雷
[大话.net]纪念918之张嘎子炸鬼子——委托
        public Bomb BombInYard;
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
//鬼子
[大话.net]纪念918之张嘎子炸鬼子——委托
        public int JapaneseNumber;
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
public yard(string Name)
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            yardName 
= Name;
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"院子:{0}", yardName);
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
//鬼子进去了
[大话.net]纪念918之张嘎子炸鬼子——委托
        public void JapaneseIn(int Number)
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            JapaneseNumber 
= Number;
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"院子进入了{0}个鬼子", Number);
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托    }

        2、地雷

[大话.net]纪念918之张嘎子炸鬼子——委托    //地雷
[大话.net]纪念918之张嘎子炸鬼子——委托
    class Bomb
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托    
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托        
//地雷爆炸
[大话.net]纪念918之张嘎子炸鬼子——委托
        public void DoBomb()
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"鬼子被炸死了!");
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托    }

       3、(主角)张嘎子

[大话.net]纪念918之张嘎子炸鬼子——委托    //张嘎
[大话.net]纪念918之张嘎子炸鬼子——委托
    class ZhangGa
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托    
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托        
public ZhangGa()
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"小游击队员张嘎子登场了");
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
//放置地雷
[大话.net]纪念918之张嘎子炸鬼子——委托
        public void SetBomb(yard yad)
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"{0}被放置了地雷", yad.yardName);
[大话.net]纪念918之张嘎子炸鬼子——委托            yad.BombInYard 
= new Bomb();
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托 
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        
//拉弦
[大话.net]纪念918之张嘎子炸鬼子——委托

[大话.net]纪念918之张嘎子炸鬼子——委托        
public void PullFireLine(FireLine fire)
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"嘎子拉弦了");
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            fire();
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托        }

[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托    }

      4、接下来是不可忽略的另一个重要角色——导火索

[大话.net]纪念918之张嘎子炸鬼子——委托    // 声明一个地雷导火索
[大话.net]纪念918之张嘎子炸鬼子——委托
    public delegate void FireLine();

      几位角色设置好了以后,好戏开场了。

[大话.net]纪念918之张嘎子炸鬼子——委托    //电影
[大话.net]纪念918之张嘎子炸鬼子——委托
    class Movie
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托    
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托        
static void Main()
[大话.net]纪念918之张嘎子炸鬼子——委托[大话.net]纪念918之张嘎子炸鬼子——委托        
[大话.net]纪念918之张嘎子炸鬼子——委托{
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"电影开始了");
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            
//主角 张嘎子 登场
[大话.net]纪念918之张嘎子炸鬼子——委托
            ZhangGa zg = new ZhangGa(); 
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            
//张家院子
[大话.net]纪念918之张嘎子炸鬼子——委托
            yard yardZhang = new yard("张家院子");
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            
//嘎子埋地雷了
[大话.net]纪念918之张嘎子炸鬼子——委托
            zg.SetBomb(yardZhang);
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            
//3个鬼子进了张家院子
[大话.net]纪念918之张嘎子炸鬼子——委托
            yardZhang.JapaneseIn(3);
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            
//张嘎子拉弦了
[大话.net]纪念918之张嘎子炸鬼子——委托
            zg.PullFireLine(new FireLine(yardZhang.BombInYard.DoBomb));
[大话.net]纪念918之张嘎子炸鬼子——委托            
//vs2005下上句可替换为下面这句
[大话.net]纪念918之张嘎子炸鬼子——委托            
//zg.PullFireLine(yardZhang.BombInYard.DoBomb);
[大话.net]纪念918之张嘎子炸鬼子——委托

[大话.net]纪念918之张嘎子炸鬼子——委托            Console.WriteLine(
"电影结束了");
[大话.net]纪念918之张嘎子炸鬼子——委托
[大话.net]纪念918之张嘎子炸鬼子——委托            Console.ReadLine();
[大话.net]纪念918之张嘎子炸鬼子——委托        }
 
[大话.net]纪念918之张嘎子炸鬼子——委托    }

       执行效果:    
[大话.net]纪念918之张嘎子炸鬼子——委托

       各位看官,看懂上面的程序了吗?可以代码拷贝到vs2003里试试,如果是vs2005的环境,在电影类的main函数里,拉弦的方式也可改成代码里那种简单的写法,效果是一样的。 

     讲一讲自己理解的委托。委托即是,把委托方法对象作为参数,把一个类的方法连接在另一个类的某个方法里,以完成一件完整的事情,而在两个类里各自完成与自己相关的步骤。需要连接的方法,参数类型必须和委托方法对象类型一致。

    以上的例子,我把导火索作为一个委托方法对象(这里的委托方法有点特殊,没有设置委托方法对象的参数,如果有的话,地雷爆炸的方法的参数应该与此一致),把地雷爆炸的方法连接了张嘎子拉弦的方法里,嘎子作的动作当然只是拉弦,然后等待地雷的反应。只要不是假冒伪劣的地雷,地雷自己是知道怎么去爆炸的。所以,嘎子一拉弦,地雷也就爆了。伟大的抗日小英雄,勇敢的游击队员,坚强的革命战士,在这一刻,神灵附体了……

上一篇:Android官方开发文档Training系列课程中文版:分享文件之分享一个文件


下一篇:《嵌入式设备驱动开发精解》——1.2 关于本教程涉及的实例