一次讓代碼更適應變化的經歷(續)

改後方案還有一個問題:索引器是用文本,這樣,若是程序員不當心寫錯一個配置選項,系統沒法在編譯階段就發現,因此想把代碼由:
string sTemp = oXMJH2["XM1"].Value;
改成
string sTemp = oXMJH2.XM1.Value;程序員

ClsXMJH2.cs 代碼以下:優化

using System.Collections.Generic;

namespace WindowsFormsApplication12
{
    class ClsXMJH2
    {
        public ClsXM XM1 = new ClsXM("XM1");
        public ClsXM XM2 = new ClsXM("XM2");

        List<ClsXM> oXM = new List<ClsXM>();

        public ClsXMJH2()
        {
            foreach (System.Reflection.FieldInfo obj1 in this.GetType().GetFields())
            {
                if (obj1.FieldType.Name == XM1.GetType().Name)
                {
                    oXM.Add(obj1.GetValue(this) as ClsXM);
                }
            }
        }

        public void GetAllValue()
        {
            foreach (ClsXM oTempXM in oXM)
            {
                oTempXM.GetValue();
            }
        }

        public void SaveAllValue()
        {
            foreach (ClsXM oTempXM in oXM)
            {
                oTempXM.SaveValue();
            }
        }
    }
}

Form1.cs 的代碼就能夠改成:this

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication12
{
    public partial class Form1 : Form
    {
        ClsXMJH2 oXMJH2 = new ClsXMJH2();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            oXMJH2.GetAllValue();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            oXMJH2.SaveAllValue();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string sTemp = oXMJH2.XM1.Value;
            MessageBox.Show(sTemp);
            oXMJH2.XM2.Value = DateTime.Now.ToString("hh:mm:ss");
        }
    }
}

到頂了,目前想不到更好的優化方面了。spa

相關文章
相關標籤/搜索