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

简介: 下午上班时,听见窗外高昂的防空警报声。再次醒悟到今天可是9.18,国耻日。历史不能忘记啊……        正在看MSDN2005的章节,正是委托的章节,看了那个计算图书馆中平装平均书价格的例子,理解一番之后,就想自己也试着来一个。

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


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

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

img_a6339ee3e57d1d52bc7d02b338e15a60.gif // 院子
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
     class  yard
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        
//院子名
img_33d02437d135341f0800e3d415312ae8.gif
        public string yardName;
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
//地雷
img_33d02437d135341f0800e3d415312ae8.gif
        public Bomb BombInYard;
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
//鬼子
img_33d02437d135341f0800e3d415312ae8.gif
        public int JapaneseNumber;
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
public yard(string Name)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            yardName 
= Name;
img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"院子:{0}", yardName);
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

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

img_05dd8d549cff04457a6366b0a7c9352a.gif    }

        2、地雷

img_a6339ee3e57d1d52bc7d02b338e15a60.gif      // 地雷
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
     class  Bomb
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        
//地雷爆炸
img_33d02437d135341f0800e3d415312ae8.gif
        public void DoBomb()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"鬼子被炸死了!");
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_05dd8d549cff04457a6366b0a7c9352a.gif    }

       3、(主角)张嘎子

img_a6339ee3e57d1d52bc7d02b338e15a60.gif      // 张嘎
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
     class  ZhangGa
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        
public ZhangGa()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"小游击队员张嘎子登场了");
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

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

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif 
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif        
//拉弦
img_33d02437d135341f0800e3d415312ae8.gif

img_33d02437d135341f0800e3d415312ae8.gif        
public void PullFireLine(FireLine fire)
img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"嘎子拉弦了");
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            fire();
img_33d02437d135341f0800e3d415312ae8.gif
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif
img_05dd8d549cff04457a6366b0a7c9352a.gif    }

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

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

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

img_a6339ee3e57d1d52bc7d02b338e15a60.gif      // 电影
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
     class  Movie
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif    
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif        
static void Main()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"电影开始了");
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
//主角 张嘎子 登场
img_33d02437d135341f0800e3d415312ae8.gif
            ZhangGa zg = new ZhangGa(); 
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
//张家院子
img_33d02437d135341f0800e3d415312ae8.gif
            yard yardZhang = new yard("张家院子");
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
//嘎子埋地雷了
img_33d02437d135341f0800e3d415312ae8.gif
            zg.SetBomb(yardZhang);
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
//3个鬼子进了张家院子
img_33d02437d135341f0800e3d415312ae8.gif
            yardZhang.JapaneseIn(3);
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
//张嘎子拉弦了
img_33d02437d135341f0800e3d415312ae8.gif
            zg.PullFireLine(new FireLine(yardZhang.BombInYard.DoBomb));
img_33d02437d135341f0800e3d415312ae8.gif            
//vs2005下上句可替换为下面这句
img_33d02437d135341f0800e3d415312ae8.gif            
//zg.PullFireLine(yardZhang.BombInYard.DoBomb);
img_33d02437d135341f0800e3d415312ae8.gif

img_33d02437d135341f0800e3d415312ae8.gif            Console.WriteLine(
"电影结束了");
img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            Console.ReadLine();
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }
 
img_05dd8d549cff04457a6366b0a7c9352a.gif    }

       执行效果:    
img_b2b967332d7c91230ebb5b7bf8e9332c.jpg

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

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

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

目录
相关文章
|
7月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
362 2
|
C++
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
在实际项目过程中,经常可能遇到被引用的项目要向上传递消息,但是又不能通过方法进行返回等操作,这个时候委托就派上用场了。以下使用委托,来实现被引用的项目向上传递消息的小教程,欢迎各位大佬提供建议。1、新增控制台项目(一般在CS架构中会用的比较多,用于跨线程传递消息使用)。此处用一个控制台项目来模拟演示使用委托进行消息事件的传递教程。
103 0
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
|
物联网 网络性能优化
阿里云物联网NET Core 客户端 CZGL.AliloTClient:9.自定义 委托事件方法
阿里云物联网NET Core 客户端 CZGL.AliloTClient:9.自定义 委托事件方法
262 15
|
物联网 网络性能优化 开发工具
.NET Core 跨平台物联网网开发:设置委托事件(二)
.NET Core 跨平台物联网网开发:设置委托事件(二)
289 0
.NET Core 跨平台物联网网开发:设置委托事件(二)
|
JSON 物联网 网络性能优化
NET Core 跨平台物联网开发 SDK属性、方法、委托、类(四)
NET Core 跨平台物联网开发 SDK属性、方法、委托、类(四)
285 0
|
物联网 网络性能优化
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:9. 自定义委托事件方法
CZGL.AliIoTClient 有7个委托事件,设置了默认的方法。你可以通过下面的方法使用默认的方法绑定到委托事件中。 public void UseDefaultEventHandler() 1)默认的方法 收到服务器下发属性设置时: public void Default_PubPrope...
4075 0
|
物联网 网络性能优化
阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:8. 委托事件
CZGL.AliIoTClient 里设置了 7 个委托事件,在程序的不不同生命周期触发。 1)7个委托事件 /// <summary> /// 服务器属性设置 /// </summary> public PublishPropert...
985 0
【原创】.Net使用委托讲解-入门
原文地址:【原创】.Net使用委托讲解-入门 什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
1252 0
|
安全 C# 索引
.NET面试题解析(05)-常量、字段、属性、特性与委托
转自:http://www.cnblogs.com/anding/p/5255492.html   常见面试题目: 1. const和readonly有什么区别? 2. 哪些类型可以定义为常量?常量const有什么风险? 3.
1341 0