C#学习之多态

本文介绍如何使用C#的多态性和简单工厂模式来实现一个灵活的计算器,通过抽象类和子类的重写实现加、减、乘、除四种运算,展示了面向对象设计的灵活性。

多态:
1、虚方法:Virtual 如果父类创建的方法有意义,并且知道如何实现,这使用虚方法实现多态
2、抽象类:abstract 如果父类抽象不出一个具体的方法,也不知道如何实现,则使用抽象类

虚方法学习:面向对象之计算器
需求分析:加减乘除,不知道用户使用哪一个,也不知道如何计算,所以使用抽象方法;
为了屏蔽子类之间的运算差异,需要使用简单工厂模式返回一个父类,调用父类的运算方法;
预算需要2个数字,父类需要2个属性。为获取两个数字,需要创建构造函数

开始写代码:
创建父类:

public  abstract  class Calculate
    {
        public double NumberOne
        {
            get;
            set;
        }
        public double NumberTwo
        {
            get;
            set;
        }
         public Calculate(double numberOne, double numberTwo)
        {
            this.NumberOne = numberOne;
            this.NumberTwo = numberTwo;
        }
        public abstract double  GetResult();
    }

创建子类加减乘除:子类重写父类的抽象方法,并使用base继承父类的构成函数

public class Add : Calculate
    {
        public Add(double numberOne, double numberTwo) : base(numberOne, numberTwo)
        {
        }

        public override double GetResult()
        {
            return NumberOne + NumberTwo;
        }
    }
    public class Sub : Calculate

    {
        public Sub(double numberOne, double numberTwo) : base(numberOne, numberTwo)
        {
        }

        public override double GetResult()
        {
            return NumberOne - NumberTwo;
        }
    }
   public class Mul : Calculate
    {
        public Mul(double numberOne, double numberTwo) : base(numberOne, numberTwo)
        {
        }

        public override double GetResult()
        {
            return NumberOne * NumberTwo;
        }
    }
  public class Division : Calculate
    {
        public Division(double numberOne, double numberTwo) : base(numberOne, numberTwo)
        {
        }

        public override double GetResult()
        {
            return NumberOne / NumberTwo;
        }
    }

创建用户界面:

tatic void Main(string[] args)
        {
            Console.WriteLine("请输入第一个数字");
            double numberOne =Convert.ToInt32( Console.ReadLine());
            Console.WriteLine("请输入第二个数字");
            double numberTwo = Convert.ToInt32(Console.ReadLine());
            double number2 = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入一个运算符 + - * / " );
            string opertor = Console.ReadLine();
             }

创建简单工厂模式,获取子类对象,并返回一个父类

public static Calculate GetCal(string opertor,double numberOne,double numberTwo)
        {
            Calculate cal = null;
            switch (opertor)
            {
                case "+":cal = new Add(numberOne,numberTwo);
                    break;
                case "-":
                    cal = new Sub(numberOne, numberTwo);
                    break;
                case "*":
                    cal = new Mul(numberOne, numberTwo);
                    break;
                case "/":
                    cal = new Division(numberOne, numberTwo);
                    break;
            }
            return cal;
        }

完善用户界面:

static void Main(string[] args)
        {
             while (true)
            {
                Console.WriteLine("请输入第一个数字");
                double number1 = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入第二个数字");
                double number2 = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("请输入一个运算符 + - * / ");
                string opertor = Console.ReadLine();
                Calculate cal = GetCal(opertor, number1, number2);
             	double result= cal.GetResult();
                Console.WriteLine(result); 
            }
               }

哈哈,完成!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值