索引器的妙用:读取配置文件

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=602

索引器(Indexer):官方说法是一种类成员,它允许类或结构的实例按与数组相同的方式排序,索引器与属性类似,只不过索引器的gei和set访问器方法带有参数,而属性访问器方法不带参数。

个人理解: 索引器是C#的一种语法构造,他可以另你用数组的方式来访问类中的集合。索引器是一种特殊的属性,他可以像属性一样通过get和set访问器的方式来指定其行为,不过要额外带参数从集合中取出或者给予赋值行为。

示例

public class StringContainer
{
     private string[] strings;
     private int t = 0;

    public StringContainer(params string[] initialString)
      {
          strings = new string[200];
         foreach(string s in initialString)
          {
              strings[t++] = s;
          }
      }
    
     public void Add(string str)
     {
         if(t < strings.Length)
          {
              strings[t++] = str;
          }
      }

    //开始定义我们的索引器
      public string this[int index]
     {
         get
          {
             if(index < t)
              {
                 return strings[index];
              }
          }
         set
          {
             if(index < t)
              {
                  strings[index] = value;
              }
          }
      }
 
    public int Counts()
 
    {
 
          return this.t;
 
    }
 


}

这里我们看到索引器的定义格式,他是通过关键字 this 来定义索引器的,索引器的语法跟属性十分相似,下面我们再看看如何调用定义好的索引器,他的调用跟属性的使用也十分相似,通过get和set并追加参数来获取信息或者赋予执行动作。

public class Test
{
      StringContainer scon = new StringContainer();
      scon.Add("a");
      scon.Add("b");
      scon.Add("c");
      scon.Add("e");
 
    string str = "abcd";
      scon[1] = str; // 这边通过索引器的方式将【第二个属性值】为b修改为abcd

    for(int i=0; i<scon.Counts();i++)
     {
          Console.WriteLine("{0}:{1}", i , scon[i]);
      }
     Console.ReadLine();
 }

摘一段索引器的妙用: 读取配置文件

public class SysConfig
     {
         // Fields
         private static SysRead m_SysRead;

         // Methods
         public static string sValue(string sKey)
          {
             string sPath = AppDomain.CurrentDomain.BaseDirectory + @"Config";
             if (!Directory.Exists(sPath))
              {
                  Directory.CreateDirectory(sPath);
              }
             string xmlFile = sPath + @"Config.Xml";
             if (File.Exists(xmlFile))
              {
                  m_SysRead = new SysRead(xmlFile);
                 if (sKey == "Conn")
                  {
                     return m_SysRead.sConnection;
                  }
                 return m_SysRead[sKey];
              }
             //MessageBox.Show("读配置文件失败", "提示", MessageBoxButtons.OK);
            return "";
          }
      }
    public class SysRead
     {
         // Fields
         private XmlDocument m_xmlDoc;
         private string m_xmlFile;
         private static XmlNode m_xmlNode;

         // Methods
         public SysRead(string sXmlFile)
          {
             try
              {
                 this.m_xmlFile = sXmlFile;
                 this.m_xmlDoc = new XmlDocument();
                 this.m_xmlDoc.Load(this.m_xmlFile);
                  m_xmlNode = this.m_xmlDoc.SelectSingleNode("Config");
              }
             catch
              {
                 //MessageBox.Show("配置文件中存在非法字符", "提示", MessageBoxButtons.OK);
            }
          }

         ~SysRead()//【布颜书】注意这里用~符号来写也是一种方式噢
         {
             m_xmlNode = null;
             this.m_xmlDoc = null;
          }

         private static string getConnValue(string sKey)
          {
             try
              {
                 string[] param = new string[2];
                  param = sKey.Split(new char[] { '.' });
                  XmlNodeList nodelist = m_xmlNode.ChildNodes;
                 foreach (XmlElement xE in nodelist)
                  {
                     if (xE.Name == param[0])
                      {
                         return xE.GetAttribute(param[1]);
                      }
                  }
              }
             catch
              {
                 return "";
              }
             return "";
          }

         // Properties
         public string this[string sKey]
          {
             get
              {
                 return getConnValue(sKey);
              }
          }

         public string sConnection
          {
             get
              {
                 return ("database=" + this["connect.DataBase"] + "; Server=" + this["connect.ServerIp"] + ";User ID=" + this["connect.Uid"] + ";Password=" + this["connect.Pw"] + ";Persist Security Info=True");
              }
          }
      }

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=602