标签:
说索引器之前先来了解一下属性:它提供灵活的机制来读取、编写或计算某个私有字段的值。 可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。 这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。
class Program { static void Main(string[] args) { DemoGet_Set demo = new DemoGet_Set() { }; demo.Name = "ss!"; demo.UserId = demo.Name; Console.WriteLine(demo.UserId); Console.ReadLine(); } } public class DemoGet_Set { /// <summary> /// 获取名字 /// </summary> private string name; public string Name { get { return name; } set { name = value + "aa"; } } /// <summary> /// 获取用户Id /// </summary> public string UserId { get; set; } }
属性的概述:
属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。
value 关键字用于定义由 set 取值函数分配的值。
不实现 set 取值函数的属性是只读的。
对于不需要任何自定义访问器代码的简单属性,可考虑选择使用自动实现的属性。 有关更多信息 参考自:C# 编程指南
索引器:有参的属性就称为索引器,允许类或结构的实例就像数组一样进行索引:
索引器定义方式:参考http://blog.csdn.net/dyllove98/article/details/9105833
[修饰符] 数据类型 this[索引类型 index]
{get{//获得属性的代码}
set{ //设置属性的代码}
}
class Program { static void Main(string[] args) { DemoGet_Set demo = new DemoGet_Set() { }; demo.Name = "ss!"; demo.UserId = demo.Name; Console.WriteLine(demo["UserId"]); Console.ReadLine(); } } public class DemoGet_Set { private Dictionary<string, string> dic = new Dictionary<string, string>() { }; /// <summary> /// 获取名字 /// </summary> public string Name { get { return this["Name"]; } set { this["Name"] = value; } } /// <summary> /// 定义索引器 /// </summary> /// <param name="index"></param> /// <returns></returns> public string this[string index] { get { return dic[index].ToString();} set { dic.Add(index,value); } } /// <summary> /// 获取用户Id /// </summary> public string UserId { get { return this["UserId"]; } set { this["UserId"] = value; } } }
参考自:C# 编程指南
索引器好处:C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作
索引器可以很好的用来读取配置文件:
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"); } } }
例子参考:http://www.cnblogs.com/aspnethot/articles/1386650.html
标签:
原文地址:http://www.cnblogs.com/linfangshuhellowored/p/4579224.html