• C#基础视频教程4.2 如何编写简单的计算器


    用过VB6或者早期代码的人都应该能感觉到,C#目前也没看出来有什么特别之处,所谓的面向对象也没有什么体现。所以我们需要在原有基础上重写一份代码,然后比较两种做法的优缺点。我们在项目上右击添加一个FunctionMath的类。

     

    之所以叫做FunctionMath,是讲他专门处理数学运算的(加减乘除之外,开方根,矩阵运算,四元数运算等等都可以认为是Math该做的事情,我们单独做这个类就是为了自己不断扩充这个类,然后越来越强大,以后碰到问题不用百度搜,不用问人,直接看自己写的函数库就完了)。我们还可以给这个类取一个别的namespace,所谓的namespace命名空间就是这个类是哪个门派的(比如前面一堆的using System.XXX,那么这些类库就都是系统自带的属于System下面的子类,我们自己创建一个Functions类库,就认为是自己创建一个门派,以后什么别的项目只要引用了这个类库,就可以使用下面的方法,提高代码的复用程度)

     

    基本可以照抄Form1的引用,引用了不一定要用(至少我们增加了using System.Windows.Forms这个DLL),这就方便随时执行MessageBox输出我们要查看的信息(我们已经namespace是Functions里就不需要再引用自己了)

     

    这个类一开始就是空的,我们先不要急着写,先要想清楚这个类要干些什么,首先是要完成加减乘除,那么很明显,需要这样四个方法,而且每个方法输入,输出都是可以轻易想通的。注意定义在类里面的方法是跟Form1的交互没有任何关系的,你不要把Form1里面的变量挪到这个FunctionMath里面,要保持这个类的干净整洁(除法的被除数不能为0这些非法情况我们也应该在自定义的类里面实现,不完善的地方发现了就去完善,从而把类越写越完整,现在能想到哪里就写哪里)

     

    除了加减乘除,我们还可以想到比如常见的开平方,开平方根,进制转换,角度弧度转换等等(所以很明显,一个完整的数学类会有很多的方法,往后我们还可以添加向量运算,比如点乘,叉乘,求夹角,还可以添加矩阵运算,比如左乘,右乘,转置,求逆),不管怎么样,我们已经学会了构建基础性的东西,并且正在投入使用。

     

    这样我们就可以使用自己类的方法来执行具体的功能了(使用的时候也不去判断是否除以0这些非法情况了,那都应该在自定义类里面完善好)。这就是所谓的面相对象的思维方法,把一类功能放到一个Calss里面,每个人该干啥都分得很清楚,比如FunctionMath只负责数学运算(我们会在后面逐渐更新FunctionString负责字符串处理,FunctionCommunication负责通讯处理,FunctionSystem负责系统交互等等) ,而前面讲的Designer.cs只负责界面布局,总而言之就是让一个文件表示一个类,干一件事(一个公司小的时候可能一个人技术,销售,财务,人事的事情都干了,但是目标要是大公司的做法,做技术的不管销售,每个文件职能分的越清楚越好) ,这需要读者慢慢体会,养成这样做的习惯,虽然双击按钮直接在里面写很爽,但那都是面相过程的做法,如果写几万行的代码就吃不消了,你到处在找你之前写过的东西,整个项目里面的重复代码,垃圾代码也到处都是。

     

    虽然把具体计算的部分剥离出来了(我们可以不断完善这个FunctionMath的类),但是主程序还是非常乱,是否有可能把代码更加精简,比如点击一个按钮只执行一个功能?这就需要根据实际项目去思考怎么精简了。比如我们目前是写一个简单的计算器(可能也可以做的很复杂),我们可以简单想想按钮无非分成三类,一类是操作数(数字,小数点),一类是操作符(加减乘除,开平方),一类是求结果(计算按钮),可能清除按钮也可以当做一类,但是没什么关系,其实点击任何按钮都可以划归到一个方法去执行,所以主界面我们可以先做成这样一个方法(需要两个参数,第一个是具体按钮内容,第二个是我们自己定义的按钮类型)

     

    流程上,我个人简单认为就A和B两个操作数,C是最后结果(不考虑连续运算),为了跟Windows自带的计算器作区分,我们会始终显示两个操作数和操作结果避免输入大量数据的时候不清楚前面输入的内容。那么按下加减乘除这种操作符号按钮之后,就切换了A和B(没有按下操作符之前,我们的数字键始终在操作A,按下操作符之后,A就固定了后面的数字都是B)这是比较简单的逻辑流程,读者也可以想想有没有更好的,更合理的写法。但至少目前为止这样做还没发现什么问题。

     

    到这一部分至少我们整个程序结构已经比较完善了,比之前的版本主程序少了50行,同时读者也可以很容易发现修改起来会比之前方便(一个方法,一改全改),在下面一个部分,我们接着优化

     

    更多教学视频和资料下载,欢迎关注以下信息:

    我的优酷空间:

    http://i.youku.com/acetaohai123

     

    我的在线论坛:

    http://csrobot.gz01.bdysite.com/

     

    问题交流:

    QQ:910358960

    邮箱:acetaohai123@163.com

     

     

     

  • 相关阅读:
    java程序员怎么创建自己的网站:第一章:总体流程
    技术汇总:第五章:使用angularjs做首页三级分类
    js中Function的apply方法与call方法理解
    常用方法
    Array对象(一)
    一张图理解is_nll isset empty
    解析centos中Apache、php、mysql 默认安装路径
    常用命令
    centos虚拟机启用网卡
    初学Linux笔记
  • 原文地址:https://www.cnblogs.com/acetaohai123/p/7586676.html
Copyright © 2020-2023  润新知