C#之索引器

什么是索引器

索引器允許類或者結(jié)構(gòu)的實例按照與數(shù)組相同的方式進(jìn)行索引。索引器類似于屬性盗棵,不同之處在于他們的訪問采用參數(shù)。

/// <summary>
    /// 最簡單的索引器
    /// </summary>
    public class IDXer
    {
        private string[] name=new string[10];

        //索引器必須以this關(guān)鍵字定義牍蜂,其實這個this就是類實例化之后的對象
        public string this[int index]
        {
            get 
            {
                return name[index];
            }
            set
            {
                name[index] = value;
            }
        }  
    }
        
    public class Program
    {
        static void Main(string[] args)
        {
            //最簡單索引器的使用           
            IDXer indexer = new IDXer();
            //“=”號右邊對索引器賦值漾根,其實就是調(diào)用其set方法
            indexer[0] = "張三";
            indexer[1] = "李四";
            //輸出索引器的值,其實就是調(diào)用其get方法
            Console.WriteLine(indexer[0]);
            Console.WriteLine(indexer[1]);
            Console.ReadKey();
        }
    }

索引器與數(shù)組的區(qū)別:

索引器的索引值(Index)類型不限定為整數(shù):
用來訪問數(shù)組的索引值(Index)一定為整數(shù)鲫竞,而索引器的索引值類型可以定義為其他類型辐怕。

索引器允許重載
一個類不限定為只能定義一個索引器,只要索引器的函數(shù)簽名不同从绘,就可以定義多個索引器寄疏,可以重載它的功能。

索引器不是一個變量
索引器沒有直接定義數(shù)據(jù)存儲的地方僵井,而數(shù)組有陕截。索引器具有Get和Set訪問器。

索引器與屬性的區(qū)別:

索引器以函數(shù)簽名方式 this 來標(biāo)識批什,而屬性采用名稱來標(biāo)識农曲,名稱可以任意
索引器可以重載,而屬性不能重載驻债。
索引器不能用static 來進(jìn)行聲明乳规,而屬性可以。索引器永遠(yuǎn)屬于實例成員合呐,因此不能聲明為static暮的。

以字符串作為下標(biāo),對索引器進(jìn)行存忍适怠:

    //以字符串為下標(biāo)的索引器
    public class IDXer2
    {
        private Hashtable name = new Hashtable();

        //以字符串為下標(biāo)的索引器
        public string this[string index]
        {
            get
            {
                return name[index].ToString();
            }
            set
            {
                name.Add(index, value);
            }
        } 
    }

    public class Program
    {
        static void Main(string[] args)
        {
            //以字符串為下標(biāo)的索引器
            IDXer2 indexer2 = new IDXer2();
            indexer2["A01"] = "張三";
            indexer2["A02"] = "李四";
            Console.WriteLine(indexer2["A01"]);
            Console.WriteLine(indexer2["A02"]);
            Console.ReadKey();
        }
  }

多參數(shù)索引器及索引器的重載

    /// <summary>
    /// 成績類
    /// </summary>
    public class Scores
    {
        /// <summary>
        /// 學(xué)生姓名
        /// </summary>
        public string StuName { get; set; }

        /// <summary>
        /// 課程ID
        /// </summary>
        public int CourseId { get; set; }

        /// <summary>
        /// 分?jǐn)?shù)
        /// </summary>
        public int Score { get; set; }
       
    }

    /// <summary>
    /// 查找成績類(索引器)
    /// </summary>
    public class FindScore
    {
        private List<Scores> listScores;

        public FindScore()
        {
            listScores = new List<Scores>();
        }

        //索引器 通過名字&課程編號查找和保存成績
        public int this[string stuName, int courseId]
        {
            get
            {
                Scores s = listScores.Find(x => x.StuName == stuName && x.CourseId == courseId);
                if (s != null)
                {
                    return s.Score;
                }
                else
                {
                    return -1;
                }
            }
            set
            {
                listScores.Add(new Scores() { StuName = stuName, CourseId = courseId, Score = value });
            }
        }

        //索引器重載冻辩,根據(jù)名字查找所有成績
        public List<Scores> this[string stuName]
        {
            get
            {
                List<Scores> tempList = listScores.FindAll(x => x.StuName == stuName);
                return tempList;
            }
        }
    }

   static void Main(string[] args)
   {
       //多參數(shù)索引器和索引器重載          
       FindScore fScore = new FindScore();
       fScore["張三", 1] = 98;
       fScore["張三", 2] = 100;
       fScore["張三", 3] = 95;
       fScore["李四", 1] = 96;
       //查找 張三 課程編號2 的成績
       Console.WriteLine("李四 課程編號2 成績?yōu)?" + fScore["李四", 1]);
       //查找所有張三的成績
       List<Scores> listScores = fScore["張三"];
       if (listScores.Count > 0)
       {
          foreach (Scores s in listScores)
          {
             Console.WriteLine(string.Format("張三 課程編號{0} 成績?yōu)?{1}", s.CourseId, s.Score));
          }
       }
       else
       {
           Console.WriteLine("無該學(xué)生成績單");
       }
       Console.ReadKey();
   }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拆祈,隨后出現(xiàn)的幾起案子恨闪,更是在濱河造成了極大的恐慌,老刑警劉巖放坏,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凛剥,死亡現(xiàn)場離奇詭異,居然都是意外死亡轻姿,警方通過查閱死者的電腦和手機犁珠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門逻炊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犁享,你說我怎么就攤上這事余素。” “怎么了炊昆?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵桨吊,是天一觀的道長。 經(jīng)常有香客問我凤巨,道長视乐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上次询,老公的妹妹穿的比我還像新娘。我一直安慰自己伸刃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布逢倍。 她就那樣靜靜地躺著捧颅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪较雕。 梳的紋絲不亂的頭發(fā)上碉哑,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音亮蒋,去河邊找鬼扣典。 笑死,一個胖子當(dāng)著我的面吹牛宛蚓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播设塔,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼凄吏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了闰蛔?” 一聲冷哼從身側(cè)響起痕钢,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎序六,沒想到半個月后任连,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡例诀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年随抠,在試婚紗的時候發(fā)現(xiàn)自己被綠了裁着。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拱她,死狀恐怖二驰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秉沼,我是刑警寧澤桶雀,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站唬复,受9級特大地震影響矗积,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敞咧,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一棘捣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妄均,春花似錦柱锹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至邑彪,卻和暖如春瞧毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寄症。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工宙彪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人有巧。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓释漆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親篮迎。 傳聞我的和親對象是個殘疾皇子男图,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章甜橱,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,739評論 2 9
  • 一逊笆、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,160評論 1 44
  • 讀書伴我 成長 高萬祥老師的一本書《優(yōu)秀教師的九堂必修課》,其中第一堂便是:讀書修...
    堅持讓寫作成為習(xí)慣閱讀 243評論 0 1
  • 你的出生就決定了你能力的上限 決定了你的智力上限岂傲、武力上限难裆、感性上限、理性上限等 你的智力加爆,也不能加到上限以上...
    你飛躍俊杰閱讀 213評論 0 0
  • 越來越覺得周總結(jié)的重要性乃戈,瞬間這一周又過去了褂痰,仔細(xì)翻看微博和筆記本才記得這周的所行所事。 這一周看的電影比較多偏化。 ...
    DL諾爾閱讀 156評論 0 1