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

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


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

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

//院子
    class yard
    
{
        
//院子名
        public string yardName;

        
//地雷
        public Bomb BombInYard;

        
//鬼子
        public int JapaneseNumber;

        
public yard(string Name)
        
{
            yardName 
= Name;
            Console.WriteLine(
"院子:{0}", yardName);
        }


        
//鬼子进去了
        public void JapaneseIn(int Number)
        
{
            JapaneseNumber 
= Number;
            Console.WriteLine(
"院子进入了{0}个鬼子", Number);
        }

    }

        2、地雷

    //地雷
    class Bomb
    
{
        
//地雷爆炸
        public void DoBomb()
        
{
            Console.WriteLine(
"鬼子被炸死了!");
        }

    }

       3、(主角)张嘎子

    //张嘎
    class ZhangGa
    
{
        
public ZhangGa()
        
{
            Console.WriteLine(
"小游击队员张嘎子登场了");
        }


        
//放置地雷
        public void SetBomb(yard yad)
        
{
            Console.WriteLine(
"{0}被放置了地雷", yad.yardName);
            yad.BombInYard 
= new Bomb();
        }


 

        
//拉弦

        
public void PullFireLine(FireLine fire)

        
{

            Console.WriteLine(
"嘎子拉弦了");

            fire();

        }


    }

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

    // 声明一个地雷导火索
    public delegate void FireLine();

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

    //电影
    class Movie
    
{
        
static void Main()
        
{
            Console.WriteLine(
"电影开始了");

            
//主角 张嘎子 登场
            ZhangGa zg = new ZhangGa(); 

            
//张家院子
            yard yardZhang = new yard("张家院子");

            
//嘎子埋地雷了
            zg.SetBomb(yardZhang);

            
//3个鬼子进了张家院子
            yardZhang.JapaneseIn(3);

            
//张嘎子拉弦了
            zg.PullFireLine(new FireLine(yardZhang.BombInYard.DoBomb));
            
//vs2005下上句可替换为下面这句
            
//zg.PullFireLine(yardZhang.BombInYard.DoBomb);

            Console.WriteLine(
"电影结束了");

            Console.ReadLine();
        }
 
    }

       执行效果:    

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

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

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

posted on 2006-09-18 20:36  网际浪人  阅读(1675)  评论(16编辑  收藏  举报