說索引器以前先來了解一下屬性:它提供靈活的機制來讀取、編寫或計算某個私有字段的值。 能夠像使用公共數據成員同樣使用屬性,但實際上它們是稱做「訪問器」的特殊方法。 這使得能夠輕鬆訪問數據,此外還有助於提升方法的安全性和靈活性。html
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; } }
屬性的概述:node
屬性使類可以以一種公開的方法獲取和設置值,同時隱藏實現或驗證代碼。編程
value 關鍵字用於定義由 set 取值函數分配的值。安全
不實現 set 取值函數的屬性是隻讀的。ide
對於不須要任何自定義訪問器代碼的簡單屬性,可考慮選擇使用自動實現的屬性。 有關更多信息 參考自:C# 編程指南
函數
索引器:有參的屬性就稱爲索引器,容許類或結構的實例就像數組同樣進行索引:flex
索引器定義方式:參考http://blog.csdn.net/dyllove98/article/details/9105833ui
[修飾符] 數據類型 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