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要美观一些。

原文地址:https://www.cnblogs.com/yumaster/p/5042664.html