在上一節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 }
運行結果如下:

