WPF+WEB+WinForm->>表现层共用类
WPF+WEB+WinForm->>表现层共用类
首先在解决方案里新建一个类库,然后在解决方案里新建三个项目,WPF,WEB,WinForm,但是这三个项目都需要一个计算类进行计算,那么就在新建的类库Calculator里面放一个Calculat.cs类,以便于三个项目共用,调用的时候需要引用一下,下面会有图解。
在类库引用Calculat.cs:
引用后:
共用类Calculat.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Calculator 7 { 8 public class Calculat 9 { 10 public abstract class Calculator //抽象类 Calculator 11 { 12 public abstract double Cal(double a, double b); //抽象方法Cal 13 } 14 public class Add : Calculator //派生类Add继承抽象类Calculator 15 { 16 public override double Cal(double a, double b)//并重写了抽象方法Cal 17 { 18 double result = 0; 19 result = a + b; 20 return result; 21 } 22 } 23 public class Sub : Calculator 24 { 25 public override double Cal(double a, double b) 26 { 27 double result = 0; 28 result = a - b; 29 return result; 30 } 31 } 32 public class Mul : Calculator 33 { 34 public override double Cal(double a, double b) 35 { 36 double result = 0; 37 result = a * b; 38 return result; 39 } 40 } 41 public class Div : Calculator 42 { 43 public override double Cal(double a, double b) 44 { 45 double result = 0; 46 result = a / b; 47 return result; 48 } 49 } 50 public class Context //上下文 51 { 52 private Calculator calculate = null;//实例化一个基类的引用对象 53 public Context(Calculator _cal)//_cal为派生类的一个对象 54 { 55 this.calculate = _cal; //把派生类的对象赋给基类的引用对象 56 } 57 public double Cal(double a, double b, String symbol) 58 { 59 return this.calculate.Cal(a, b);//返回计算结果 60 } 61 } 62 } 63 }
MainWindow.xaml.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Data; 8 using System.Windows.Documents; 9 using System.Windows.Input; 10 using System.Windows.Media; 11 using System.Windows.Media.Imaging; 12 using System.Windows.Navigation; 13 using System.Windows.Shapes; 14 15 namespace WPF 16 { 17 /// <summary> 18 /// MainWindow.xaml 的交互逻辑 19 /// </summary> 20 public partial class MainWindow : Window 21 { 22 public MainWindow() 23 { 24 InitializeComponent(); 25 } 26 int Count=0; 27 int Right=0; 28 public static String AddSymbol = "+"; //加法 29 public static String SubSymbol = "-"; //减法 30 public static String MulSymbol = "*"; //乘法 31 public static String DivSymbol = "/"; //除法 32 private void textBox3_KeyDown(object sender, KeyEventArgs e) 33 { 34 double a = double.Parse(textBox1.Text); //用来存第一个数 35 string symbol = comboBox1.Text; //用来存运算符 36 double b = double.Parse(textBox2.Text); //用来存第二个数 37 Calculator.Calculat.Context contex = null; //上下文 38 if (symbol.Equals(AddSymbol)) //若为加号 39 { 40 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Add()); //加法策略 41 } 42 else if (symbol.Equals(SubSymbol)) //如果减号 43 { 44 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Sub()); //减法策略 45 } 46 else if (symbol.Equals(MulSymbol)) //若为乘号 47 { 48 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Mul()); //乘法策略 49 } 50 else if (symbol.Equals(DivSymbol)) //若为除号 51 { 52 contex = new Calculator.Calculat.Context(new Calculator.Calculat.Div()); //除法策略 53 } 54 string answer = contex.Cal(a, b, symbol).ToString(); //用answer来存计算出来的答案,此时已经计算出a,b两个数的运算结果。 55 if (e.Key == Key.Enter) //回车操作 56 { 57 string result = textBox1.Text + comboBox1.Text + textBox2.Text;//把运算式子存在result里面 58 Count++; //出题总数加一 59 if (textBox3.Text == answer) //如果输入答案与计算出的answer相等 60 { 61 MessageBox.Show("回答正确!"); //弹出回答正确 62 listBox1.Items.Add(result + "=" + textBox3.Text.Trim() + "√");//并把运算式子存在listbox里 63 Right++; //答对题数加一 64 } 65 else //如果答错 66 { 67 MessageBox.Show("答题错误!"); //弹出答题错误 68 listBox1.Items.Add(result + "=" + textBox3.Text.Trim() + "×");//同样把运算式子放在listbox 69 } 70 label2.Content = "正确率:" + Convert.ToString(Right * 1.0 / Count * 100).PadRight(5, ' ').Substring(0, 5) + "%";//统计正确率 71 textBox1.Clear();//把文本框清空,进行下一次出题 72 textBox2.Clear(); 73 textBox3.Clear(); 74 } 75 } 76 } 77 }
出题答题:
统计:
感觉WPF的界面会比WEB、WinForm要美观一些。