在上一节C#课上,我们学习了用类的继承的方式来做一个四则运算器,然而老师的代码在课上演示的效果并不理想,而且没有使用多态的思想实现,今天我们就来用多态的方式实现四则运算器。
1. 题目及要求
2. Arithmetic类的实现
在实现Arithmetic类之前,我们需要一个类库,类库的创建方法如下:
打开VisualStidio,新建--项目--在c#一栏中选中类库
我们将我们的类库命名为MyClassLibrary1,当然你也可以根据自己的喜好命名
进入类库后,将c#文件重命名为Airthmetic,并开始编写代码
Aeithmetic.cs具体代码如下:
1 using System; 2 3 namespace MyClassLibrary1 4 { 5 public class Arithmetic //声明算术运算类 6 { 7 private double num1; 8 private double num2; //设置两个操作数 9 //声明两个操作数的索引 10 public double Num1 11 { 12 get 13 { 14 return num1; 15 } 16 set 17 { 18 num1 = value; 19 } 20 } 21 public double Num2 22 { 23 get 24 { 25 return num2; 26 } 27 set 28 { 29 num2 = value; 30 } 31 } 32 //声明Airthmetic类的计算值方法 33 public virtual string GetResult() 34 { 35 return "两数没有做任何算术运算"; 36 } 37 //检查输入的数据是否符合规范 38 public static bool CheckNum(string s1, string s2) 39 { 40 double num; 41 bool flag; //声明标志变量flag 42 if (!double.TryParse(s1, out num)) 43 flag = false; //当第一个数字不合规范时,flag为假 44 else if (!double.TryParse(s2, out num)) 45 flag = false; //第二个数字不合规范时,flag为假 46 else flag = true; //当两个数字都符合规范时,flag为真 47 return flag; 48 } 49 } 50 51 public class NumAdd:Arithmetic //声明加法运算类 52 { 53 //重载父类中的计算值方法 54 public override string GetResult() 55 { 56 string result = "两数相加的结果为:"; 57 double num = Num1 + Num2; //计算两个数的和 58 result += Convert.ToString(num); //将计算结果转换为字符串 59 return result; 60 } 61 } 62 63 public class NumSub : Arithmetic //声明减法运算类 64 { 65 //重载父类中的计算值方法 66 public override string GetResult() 67 { 68 string result = "两数相减的结果为:"; 69 double num = Num1 - Num2; // 计算两个数的差 70 result += Convert.ToString(num); // 将计算结果转换为字符串 71 return result; 72 } 73 } 74 75 public class NumMul : Arithmetic //声明乘法运算类 76 { 77 //重载父类中的计算值方法 78 public override string GetResult() 79 { 80 string result = "两数相乘的结果为:"; 81 double num = Num1 * Num2; //计算两个数的积 82 result += Convert.ToString(num); //将计算结果转换为字符串 83 return result; 84 } 85 } 86 87 public class NumDiv : Arithmetic //声明除法运算类 88 { 89 //重载父类中的计算值方法 90 public override string GetResult() 91 { 92 string result = "两个数相除的结果为:"; 93 double num = Num1 / Num2; //计算两个数的商 94 result += Convert.ToString(num); //将计算结果转换为字符串 95 return result; 96 } 97 } 98 }
在编写完代码之后,我们在菜单栏上点击 生成--生成解决方案即可保存类库
生成后的结果如下:
请记住生成的路径名,我们在等下引用此类库时要用到
1. 连接到类库
首先,我们创建一个c#窗口程序
然后,我们需要将刚才创建的类库引用到这个项目中去(直接在项目里面新建类的就不需要)
对你的项目右键--添加--引用
然后点击 浏览,在生成的路径里找到你的类库并添加
之后我们再在代码里加入using MyClassLibrary1;便可以正常使用类库了
当然,如果你嫌创建和引用类库过于麻烦,你也可以像java一样直接在项目里新建类,这里只是提供一下类库的创建和连接!
1. 窗体应用程序的具体实现
接下来,让我们回到窗体应用程序的实现中来,在创建了窗体应用程序后,右手边会出现一个可视化界面,将要用的控件拖到合适位置并右键--属性对他们的名字和文本进行改变
这里提供我的界面布局和命名(命名用红字标出)
然后我们双击确定按钮进入编程界面。
Form1.cs具体代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 using MyClassLibrary1; 11 12 namespace cs四则运算器2018_1023 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 this.Text = "四则运算工具"; //声明标题文字 20 } 21 22 private void ButtonSubmit_Click(object sender, EventArgs e) 23 { 24 string a = textBoxNum1.Text; //获取操作数A的字符串 25 string b = textBoxNum2.Text; //获取操作数B的字符串 26 if (!Arithmetic.CheckNum(a, b)) //当数字不符合规范时,打印警告信息并退出 27 { 28 MessageBox.Show("请输入符合规范的数字!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); 29 return; 30 } 31 32 33 Arithmetic ari = new Arithmetic(); //声明一个Arithmetic类实例。 34 35 //根据单选控件选中的值来决定使用哪一个子类来初始化 36 if (RadioAdd.Checked) 37 ari = new NumAdd(); 38 if (RadioSub.Checked) 39 ari = new NumSub(); 40 if (RadioMul.Checked) 41 ari = new NumMul(); 42 if (RadioDiv.Checked) 43 ari = new NumDiv(); 44 45 ari.Num1 = Convert.ToDouble(a); 46 ari.Num2 = Convert.ToDouble(b); //将两个操作数赋值给实例ari 47 LabelResult.Text = ari.GetResult(); //将结果转换为字符串 48 } 49 } 50 }
运行结果如下: