大话设计模式之面向对象基础篇(五)

来源:互联网 发布:陀思妥耶夫斯基 知乎 编辑:程序博客网 时间:2024/06/05 18:06

  貌似两周前更新了4篇关于《大话设计模式》这本书中最后的附录篇——面向基础的博客,分别说了我对面向对象中类和实例、构造方法、方法重载、属性与修饰符、封装、继承、多态、重构、抽象类、接口、集合以及泛型的理解,唯独缺乏了委托与事件,那时理解起来很困难,看书都看不下去了,就感觉委托是代表或是载体,一个中间桥梁,通俗点说,就是中间传话的,它存在的意义就是为了满足人们偷懒的期望。

  前天下午,患有严重强迫症的我又把简单工厂模式中的那个计算器的例子拿出来了,一心想把它实现,耗费了很长时间,受到一些点拨,总算是解决了问题,而且竟然牵扯出了因为理解困难而一直被我挂起来的“委托和事件”,令人惊喜的是,让我对VS这款强大的软件的使用熟悉度又上升了很多,废话不多说,步入正题!

  敲的时候是仿照源码的,发现源码的0—9这几个按钮,不管点击哪个按钮,都能蹦到button0的Click事件下,代码如下:

<span style="font-size:18px;"> private void button0_Click(object sender, EventArgs e)        {            if (bOperate)            {                txtShow.Text = "";                bOperate = false;            }                        string number = ((Button)sender).Text;            txtShow.Text = Operation.checkNumberInput(txtShow.Text, number);                    }</span>

  

  而我画完了窗体,每次点击按钮,都会有相应按钮的事件,不能公用Botton0的事件,这样的话,同样的代码需要复制使用,显然违背了面向对象的编程思想,于是为了实现和源码一样的效果,我就把点击后出来的不需要的按钮事件代码删除了,如下图:



  删除后,并没有在意,而是继续探索如何让多个按钮事件共享Button0按钮事件的方法,此处弱弱的说一句,这在我看来就是委托的使用,委托的终极目标也许是实现事件的共享和公用吧~猛然想起自己忘了度娘,便搜索“如何让VS中的多个按钮共享一个事件”,然后得到了答案:



  按照上图所示设置,就能实现多个按钮共用一个事件了,而且很容易让人把目光聚集在Form1.Designer.cs下的Form中最后一句代码上——this.button8.Click += new System.EventHandler(this.button0_Click);这句代码体现的就是事件和委托的完美结合使用(下边的图为了突出说明问题,button8最后一句代码没有截取),如果没有这句代码的话,只需要借助闪电(事件)选项,设置过后,代码自然就生成了~



  万事俱备,只欠运行,将下图所示的“计算器”设置为启动项,但是运行的时候只是出来一个黑框,而不是Form1的界面,这是太考验人的心态了~后才得知是属性设置出现了问题,运行后不应是控制台应用程序,而应该是Windows应用程序,改正“计算器”属性即可~



  屋漏偏逢连夜雨,船湿又遇打头风,运行时出现如下界面,若是点击“忽略并继续”,Form1界面上的所有控件都消失不见了!!!为什么会这样呢,还记得上边出现过的某一张图吗?



  就是因为想实现代码的共用,点击了Button0以外的按钮后,又把相关的代码删除了,但是我一厢情愿的删除终究抵不过“雁过留痕”啊抓狂



  遇到这样的情况,不要点击“忽略并继续”,回到Form1.Designer.cs下的Form中,有错误提示,点击下边的错误,就会定位于有问题的代码处,如下,浅浅的白框就是我们需要重点擦去的痕迹,删除即可,然后去找闪电标识设置吧!代码自动生成~




  Form1.Designer.cs下的Form中的相关代码若是注释后会出现什么情况呢?见下图:



  解决完以上问题后,我的程序终于能像源码那样执行了,之后,我没继续敲别的例子,而是把源码拿出来去折腾,像师傅说的那样,当我们不理解代码的作用时,就去改着玩儿吧,代码中的阴差阳错也很美丽~


1 0
原创粉丝点击