.NET索引器

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

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

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

 

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");
            }
        }
    }

你可能感兴趣的:(.net)