面向对象

封装:把细节屏蔽,只留一个功能。

继承:复用,拿来主义。

多态:同一种行为,针对不同的对象,得到不同的结果。

            同一个对象,得到不同的状态。

面向过程:一步步的解决问题,亲自亲为。

面向对象:你需要完成某件事,你就去找一个对象,让它去完成(你要计算,那就从兜里掏出手机,打开计算器就可以了)。

面向过程到面向对象的转变就是“执行者”到“命令者”的转变。


Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise
{
    class Program
    {
        static void Main(string[] args)
        {
            //面向过程的计算器
            Console.WriteLine("请输入第一个数:");
            double dNum1 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("请输入第二个数:");
            double dNum2 = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("请输入运算符(+,-,*,/):");
            string oper = Console.ReadLine(); // operation 运算

            double res = 0;
            bool isRight = true; // 是对的
            switch (oper)
            {
                case "+": res = dNum1 + dNum2; break;
                case "-": res = dNum1 - dNum2; break;
                case "*": res = dNum1 * dNum2; break;
                case "/": res = dNum1 / dNum2; break;
                default: isRight = false; break;
            }

            if (isRight)
                Console.WriteLine("{0} {1} {2} = {3}", dNum1, oper, dNum2, res);
            else
                Console.WriteLine("运算符出错");

            // 面向对象的计算器
            // 你要计算
            // 从兜里掏出手机来,打开计算器
            //计算器对象 = new 计算器();
            //计算器对象.使用();
            Calculator cal = new Calculator();
            cal.Start();
        }
    }
}
Calculator.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise
{
    class Calculator
    {
        //定义字段
        double dNum1;
        double dNum2;
        string oper;

        //Start开始
        public void Start() 
        {
            while (true)
            {
                //输入数字与运算符
                Input();
                //计算
                Calculating();

                Console.Write("是否继续(yes,no):");
                if (Console.ReadLine() == "no") break;

            }
        }
        private void Input() 
        {
            dNum1 = InputNumber("请输入第一个数:");
            dNum2 = InputNumber("请输入第二个数:");
            oper = InputOperation("请输入运算符(+,-,*,/):", "+,-,*,/".Split(','));
        }
        private void Calculating() 
        {
            double res=0;
            //switch (oper)
            //{
            //    case "+":res = dNum1 + dNum2;break;
            //    case "-":res = dNum1 + dNum2;break;
            //    case "*":res = dNum1 + dNum2;break;
            //    case "/":res = dNum1 + dNum2;break;
            //    default:  break;
            //}
            //Console.WriteLine("{0}{1}{2}={3}", dNum1, oper, dNum2, res);

            res=Factory.CreatorInstance(oper).计算(dNum1, dNum2);
            Console.WriteLine("{0}{1}{2}={3}", dNum1, oper, dNum2, res);
        }
        private double InputNumber(string msg) 
        {
            while (true)
            {
                Console.WriteLine(msg);
                string sNum1 = Console.ReadLine();
                double fNum1;
                if (double.TryParse(sNum1,out fNum1))
                {
                    return fNum1;
                }
            }
        }
        private string InputOperation(string msg,string[] operation) 
        {
            while (true)
            {
                Console.WriteLine(msg);
                string oper = Console.ReadLine();
                if (operation.Contains(oper))
                {
                    return oper;
                }
                else {
                    Console.WriteLine("运算符不存在");
                }
            }
            
        }
    }
}
Factory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exercise
{
    class Factory 
    {
        public static CalculatorBase CreatorInstance(string oper) 
        {
           CalculatorBase cal=null;
           switch (oper)
           {
               case "+": cal = new Addition(); break;
               case "-": cal = new Substraction(); break;
               case "*": cal = new Myltiplication(); break;
               case "/": cal = new Division(); break;
               default:
                   break;
           }

           return cal;
        }
    }
    class CalculatorBase
    {
        public virtual double 计算(double dNum1,double dNum2)
        {
            // 不知道写什么,但是又不能返回有效数据,但是不反回又报错
            // 抛异常
            throw new Exception("exception...");
        }
    }
    class Addition:CalculatorBase
    {
        public override double 计算(double dNum1, double dNum2)
        {
            return dNum1+ dNum2;
        }
    }
    class Substraction : CalculatorBase
    {
        public override double 计算(double dNum1, double dNum2)
        {
            return dNum1 - dNum2;
        }
    }
    class Myltiplication : CalculatorBase
    {
        public override double 计算(double dNum1, double dNum2)
        {
            return dNum1 * dNum2;
        }
    }
    class Division : CalculatorBase
    {
        public override double 计算(double dNum1, double dNum2)
        {
            return dNum1 / dNum2;
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值