计算器学习(封装反射学习)

之前自己用C#做过计算器,但是没有用到封装和反射,这次修改了下,做个记录

配置文件App.config(动态添加运算符)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
  </startup>
  <appSettings>
    <add key="+" value="Addition"/>
    <add key="-" value="subtract"/>
  </appSettings>
</configuration>

Factory类

interface Factory
    {
        double operation(double num1, double nunm2);
    }

subtract类

class subtract : Factory
    {
        public double operation(double num1, double num2)
        {
            double result = 0;
            result = num1 - num2;
            return result;
        }
    }

Addition类

class Addition : Factory
    {
        public double operation(double num1, double num2)
        {
            double result = 0;
            result = num1 + num2;
            return result;
        }
    }

Form

public partial class Form1 : Form
    {
        double num1, num2;
        bool judge = false;//判断是不是小数
        public Form1()
        {
            InitializeComponent();
            string[] keys = ConfigurationSettings.AppSettings.AllKeys;
            for (int i = 0; i < keys.Length; i++)
            {
                string key = keys[i];
                comboBox1.Items.Add(key);
            }
        }
        #region "="事件
        private void button15_Click(object sender, EventArgs e)
        {            
            num2 = double.Parse(textBox1.Text);
            string notation = comboBox1.Text;//获得运算符
            string sumbol = ConfigurationSettings.AppSettings[notation];//读配置文件符号
            Factory factory = (Factory)Assembly.Load("计算器封装反射学习comboBox").CreateInstance("计算器封装反射学习comboBox." + sumbol);//反射获得计算类
            double result = factory.operation(num1, num2);//通过operation方法进行计算
            textBox1.Text = System.Convert.ToString(result);//显示结果
        }
        #endregion

        #region 点击数字按钮,调用ClickNumber方法

        public void ClickNumber(int Number)
        {
            if (judge)
            {
                textBox1.Text = textBox1.Text + Number;
            }
            else
            {
                if (textBox1.Text == "0")
                {
                    textBox1.Text = Number + ".";
                }
                else
                {
                    textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1) + Number + ".";
                }
            }
        }
        #endregion

        #region 定义按钮0-9单击事件
        private void button1_Click(object sender, EventArgs e)
        {
            ClickNumber(1);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ClickNumber(2);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ClickNumber(3);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ClickNumber(4);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            ClickNumber(5);
        }

        private void button6_Click(object sender, EventArgs e)
        {
            ClickNumber(6);
        }

        private void button7_Click(object sender, EventArgs e)
        {
            ClickNumber(7);
        }

        private void button8_Click(object sender, EventArgs e)
        {
            ClickNumber(8);
        }

        private void button9_Click(object sender, EventArgs e)
        {
            ClickNumber(9);
        }

        private void button10_Click(object sender, EventArgs e)
        {
            ClickNumber(0);
        }
        #endregion

        #region 判断小数点
        private void button11_Click(object sender, EventArgs e)
        {
            judge = true;
        }
        #endregion

        #region C键复位
        private void button12_Click(object sender, EventArgs e)
        {
            num1 = 0;
            num2 = 0;
            judge = false;
            textBox1.Text = "0";
            label1.Text = "";
            //comboBox1.Items.Clear();
        }
        #endregion

        #region 退出所有程序
        private void button16_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }
        #endregion

        #region 主界面显示,计算器初始显示为"0"
        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Text = "0";
            textBox1.TextAlign = HorizontalAlignment.Right;//右对齐
        }
        #endregion

        #region
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            num1 = double.Parse(textBox1.Text);
            textBox1.Text = "0";
            judge = false;
        }
        #endregion

    }

运行界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值