现在的位置: 首页 > 综合 > 正文

从简单计算器所想到的面向对象思想(C#源代码)

2013年09月21日 ⁄ 综合 ⁄ 共 3187字 ⁄ 字号 评论关闭
  1. using System;
  2. namespace NMCounter
  3. {
  4.     //run main class
  5.     class CRunMain
  6.     {
  7.         public static int Main()
  8.         {
  9.             COperator objOpr = null;
  10.             string strOpr;
  11.             double duNum1 = 0.0;
  12.             double duNum2 = 0.0;
  13.             Console.WriteLine("please input first number: ");
  14.             duNum1 = int.Parse(Console.ReadLine());
  15.             Console.WriteLine("please input operation string:(+ - * /)");
  16.             strOpr = Console.ReadLine();
  17.             objOpr = COprFactory.CreateOperator(strOpr);
  18.             if (null == objOpr)
  19.             {
  20.                 Console.WriteLine("error operator!");
  21.                 return 0;
  22.             }
  23.             Console.WriteLine("please input the second number:");
  24.             duNum2 = int.Parse(Console.ReadLine());
  25.             objOpr.m_du1 = duNum1;
  26.             objOpr.m_du2 = duNum2;
  27.             Console.WriteLine("the result = " + objOpr.GetRuesult());
  28.             return 0;
  29.         }
  30.     };
  31.     class COprFactory
  32.     {
  33.         public static COperator CreateOperator(string strType)
  34.         {
  35.             COperator objOpr = null;
  36.             switch (strType)
  37.             {
  38.                 case "+":
  39.                     objOpr = new COprAdd();
  40.                     break;
  41.                 case "-":
  42.                     objOpr = new COprSub();
  43.                     break;
  44.                 case "*":
  45.                     objOpr = new COprMul();
  46.                     break;
  47.                 case "/":
  48.                     objOpr = new COprDiv();
  49.                     break;
  50.                 default:
  51.                     objOpr = null;
  52.                     break;
  53.             }
  54.             return objOpr;
  55.         }
  56.     };
  57.     //计算器实现类
  58.     class COperator
  59.     {
  60.         public COperator()
  61.         {
  62.             this.m_duNum1 = 0;
  63.             this.m_duNum2 = 0;
  64.         }
  65.         public virtual double GetRuesult()
  66.         {
  67.             return 0;
  68.         }
  69.         public double m_du1
  70.         {
  71.             get
  72.             {
  73.                 return this.m_duNum1;
  74.             }
  75.             set
  76.             {
  77.                 this.m_duNum1 = value;
  78.             }
  79.         }
  80.         public double m_du2
  81.         {
  82.             get
  83.             {
  84.                 return this.m_duNum2;
  85.             }
  86.             set
  87.             {
  88.                 this.m_duNum2 = value;
  89.             }
  90.         }
  91.         private double m_duNum1;
  92.         private double m_duNum2;
  93.     };
  94.     class COprAdd:COperator
  95.     {
  96.         public COprAdd()
  97.         {
  98.         }
  99.         public override double GetRuesult()
  100.         {
  101.             return this.m_du1 + this.m_du2;
  102.         }
  103.     }
  104.     class COprSub:COperator
  105.     {
  106.         public COprSub()
  107.         {
  108.         }
  109.         public override double GetRuesult()
  110.         {
  111.             return this.m_du1 - this.m_du2;
  112.         }
  113.     }
  114.     class COprMul:COperator
  115.     {
  116.         public COprMul()
  117.         {
  118.         }
  119.         public override double GetRuesult()
  120.         {
  121.             return this.m_du1 * this.m_du2;
  122.         }
  123.     }
  124.     class COprDiv:COperator
  125.     {
  126.         public COprDiv()
  127.         {
  128.         }
  129.         public override double GetRuesult()
  130.         {
  131.             if (Math.Abs(this.m_du2) < 0.00000001)
  132.             {
  133.                 throw new Exception("除数不能为0!");
  134.             }
  135.             return this.m_du1 / this.m_du2;
  136.         }
  137.     }
  138. }

抱歉!评论已关闭.