C#索引器

說索引器以前先來了解一下屬性:它提供靈活的機制來讀取、編寫或計算某個私有字段的值。 能夠像使用公共數據成員同樣使用屬性,但實際上它們是稱做「訪問器」的特殊方法。 這使得能夠輕鬆訪問數據,此外還有助於提升方法的安全性和靈活性。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

  • 屬性使類可以以一種公開的方法獲取和設置值,同時隱藏實現或驗證代碼。編程

  • get 屬性訪問器用於返回屬性值,而 set 訪問器用於分配新值。 這些訪問器能夠有不一樣的訪問級別。數組

  • value 關鍵字用於定義由 set 取值函數分配的值。安全

  • 不實現 set 取值函數的屬性是隻讀的。ide

  • 對於不須要任何自定義訪問器代碼的簡單屬性,可考慮選擇使用自動實現的屬性。 有關更多信息 參考自:C# 編程指南
    函數

  • get;set 此時都須要,若是缺乏get 與set 會發生語法錯誤。若是你須要使用只讀的屬性須要設置一個privates 私有的set就行

索引器:有參的屬性就稱爲索引器,容許類或結構的實例就像數組同樣進行索引:flex

索引器定義方式:參考http://blog.csdn.net/dyllove98/article/details/9105833ui

[修飾符] 數據類型 this[索引類型 index]
{ 
  get{//得到屬性的代碼}
  
set{ //設置屬性的代碼}
}
  1. 修飾符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.
  2. 索引器類型表示該索引器使用哪一類型的索引來存取數組或集合元素,能夠是整數,能夠是字符串;this表示操做本對象的數組或集合成員,能夠簡單把它理解成索引器的名字,所以索引器不能具備用戶定義的名稱。索引器參數能夠不止一個,類型也不限於int,幾乎能夠是任意類型
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;
            }
        }
    }
   
  • 使用索引器能夠用相似於數組的方式爲對象創建索引。this

  • get 訪問器返回值。 set 訪問器分配值。

  • this 關鍵字用於定義索引器。

  • value 關鍵字用於定義由 set 索引器分配的值。

  • 索引器沒必要根據整數值進行索引,由您決定如何定義特定的查找機制。

  • 索引器可被重載。

  • 索引器能夠有多個形參,例如當訪問二維數組時。

參考自: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

相關文章
相關標籤/搜索