C#编写计算器 最大化融入面向对象思想。
C#编写一个计算器(就像xp系统自带的)。很容易,我也会。
但是最近看了本《大话设计模式 之 小菜编程成长记》,我发现以前真是太垃圾了。代码的耦合太多。就像计算器上有那么多键,我是给每个键添加事件,事件都差不多。虽然实现了计算器。但是。。总之就是很垃圾。
我想写一个方法,就是每个按键事件都可以调用的。比如我按1这个按钮,这个方易做图传递1的按钮的参数到textbox里。按2,同样是这个方法传参数。
可是我写不出来啊。。
各位高手们。你们帮帮我,给个思路或简短的代码,启发下我。
菜鸟也要进步的。。需要大虾的帮助
答案:计算器可以设计为两种对象的容器,一种是数据对象,一种是算法对象。
例如,当计算器设置为二进制模式时,为它添加0和1两种数据对象,它自动在计算器键盘上使0和1可用,其它数字不可用。计算器根据容器中数据对象的个数自动转换进制。
而算法对象放在另一个容器中,每向这个容器添加一个算法这个容器会自动显示一个按钮。每种算法都要实现同一个接口,接受操作数并返回处理结果,有自己的名字。计算器读取到算法的名字后为它创建一个按钮,将名字写在按钮上,点击按钮后切换当前算法指针。
完成后可以很轻松地向这个计算器中添加功能使之实现更丰富的进制转换以及更多的算法。甚至可以打开其它dll文件从里面读取算法给自己添加功能。
写一个方法给每个按键调用并不是一个好的设计,这样做其实也会使代码高度耦合。 一个简单计算器程序中如果有一个类的代码超过了150行,我想你就应该思考一下自己的设计是否合理。
1-9,加减乘除分别用两组控件数组来实现。。不需要一个一个去添加事件。。
功能类似的都可以用控件数组。。
神童哥估计就是这个意思。。牛哥一个。。你把按键归为几组,比如数字键为一组,运算符归一组,每组按键的click事件都指向他们的同一个事件响应函数,在函数内分析传递进来的Sender就可以判断出是哪个键被点击了。
这样你的程序会简洁得多。不过编译出来的结果应该表现差不多,只是程序好看了。
如果很多按钮都使用同一事件的话 ,的确看起来美观些。但是,却要牺牲一些性能,例如判断按钮时就需要一步操作。
如果一个方法中判断超过26条的话,那么这个方法本身就不能达标。如果是数字键的话,就都是使用同一个方法,然后根据按键的不同,传递不同的数字罢了,代码是少了,也还是要根据每个按钮双击进去写的。
上一个:ASP.NET(C#)继承类问题
下一个:关于编程语言哪个好(java C++ C#)