namespace C计算器
{
class Program
{
static void Main(string[] args)
{
//多态是基于继承.
//找父类.
//寻找每个子类的共同方法. 将这个方法定义在父类中,.
//找每个子类的同1个方法 具有不同的实现.
//Console.WriteLine("请输入第一个数字");
//int numA = int.Parse(Console.ReadLine());
//Console.WriteLine("请输入第二个数字");
//int numB = int.Parse(Console.ReadLine());
//Console.WriteLine("请输操作符: 1.加 2.减 3.乘 4.除");
//string opt = Console.ReadLine();
//Operation operation = OperationFactory.GetOperation(opt, numA, numB);
//Console.WriteLine(operation.GetRes());
int numA = 110;
int numB = 220;
string opt = "+";
Operation operation = OperationFactory.GetOperation(opt, numA, numB);
Console.WriteLine(operation.GetRes());
Console.ReadKey();
}
}
}
namespace C计算器
{
/// <summary>
/// 计算父类.
/// </summary>
class Operation
{
public int NumA { get; set; }
public int NumB { get; set; }
public Operation() { }
public Operation(int numA, int numB)
{
this.NumA = numA;
this.NumB = numB;
}
public virtual int GetRes()
{
return 0;
}
}
}
namespace C计算器
{
/// <summary>
/// 工厂类.
/// </summary>
class OperationFactory
{
/// <summary>
/// 根据两个数和操作符类型返回不同的子类对象,
/// </summary>
/// <param name="opt"></param>
/// <param name="numA"></param>
/// <param name="numB"></param>
/// <returns></returns>
public static Operation GetOperation(string opt, int numA, int numB)
{
Operation operation = null;
switch (opt)
{
case "1":
operation = new Add(numA, numB);
break;
case "2":
operation = new Jian(numA, numB);
break;
case "3":
operation = new Ji(numA, numB);
break;
case "4":
operation = new Div(numA, numB);
break;
}
return operation;
}
}
}
namespace C计算器
{
class Add:Operation
{
public Add(int numA,int numB)
{
this.NumA = numA;
this.NumB = numB;
}
public override int GetRes()
{
return base.NumB + NumA;
}
}
}
namespace C计算器
{
class Jian:Operation
{
public Jian(int numA, int numB)
:base(numA,numB)
{
}
public override int GetRes()
{
return base.NumA - base.NumB;
}
}
}
namespace C计算器
{
class Ji:Operation
{
public Ji(int numA, int numB)
:base(numA,numB)
{
}
public override int GetRes()
{
return base.NumA * base.NumB;
}
}
}
namespace C计算器
{
class Div:Operation
{
public Div(int numA, int numB)
:base(numA,numB)
{
}
public override int GetRes()
{
return base.NumA / base.NumB;
}
}
}