程序员人生 网站导航

C#学习日记28---索引器、重载索引器

栏目:php教程时间:2016-05-04 15:36:10

        索引器允许类或结构的实例就像数组1样进行索引,当您为1个类定义1个索引器时,这个类就会像1个数组1样,您可使用数组访问符 '[]' 对该类的实例进行访问.. 索引器与 属性  类似,但是索引器要采取参数,(也能够这么认为,索引器是1个类的属性,一样也是通过访问器(1种特殊的方法) 实现的)

    为了更清楚1点,还是举个例子吧,  大学是人生中最悠闲的时光,同学们可以做许多自己曾想做而由于种种缘由没有做的事,逃课很明显正是其中之1..为了制止逃课的行动,每次上课的时候老师都要点名或是点学号,我是4班的,老师喜欢点学号,"4班1号" 然后下面大声答"到……",“4班2号”,“到”,“4班3号”...... "3号。。3号同学。。",“老师HC666今天肚子疼上医院了”中国好室友阿^_^),“哦,4号”..... 老师点名就是对4班的1个索引。

     如果将class4看做是由Classes类实例化的1个对象,class[1]就是对1号同学的索引,(想想数组就明白了)那怎样实现呢?

定义索引器:

         上面也说了,索引器与属性类似,自然也少不了get,set访问器了,索引器也是类的成员,自然也得在类里面定义了,以下:

        public 返回值类型 this[参数类型 参数]  

             {

                                 get { return 参数指定的值;   }    //get访问器

                    set {  /*设置参数指定的值 */    }     //set访问器

            }

 

索引器的实例:

          我们将上面的例子代码化,以下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义1个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号 "+class4[j]); } } } }


结果:

 

 

重载索引器:

         上面的程序中,我们实现了通过学号索引出该学生姓名,那怎样实现通过姓名索引出学号呢?我们将索引看做是1个特殊的方法,方法可以利用重载实现不同的参数相同的功能,那末索引器自然也能够重载。用法与方法重载类似,(查看方法重载点这里),我们还是接着上面的例子,这次要满足使用姓名索引出学号:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义1个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } //重载索引器参数设为string类型 public uint this[string name] { get { //找到与name匹配的学号 uint index=1; while (StudentName[index] != name && index < 6) { index++; } return index; } set { } } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出,通过学号索引出姓名 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号 "+class4[j]); } //通过姓名索引出学号 for (int k = 1; k < 6; k++) { string name="HC"+k; Console.WriteLine(name+" "+class4[name]+"号");//对照上面用法1样参数不1样 } } } }


结果:

 

 

      上面中我们说了当1个类定义了索引器就能够将这个类当作数组1样看待,那在学习 数组 的时候知道,数组有多维度的,索引器所在的类呢??我们遍历数组用的foreach遍历语句对这个类也能用吗??我下1篇再作介绍吧!!(由于学校要短电了……)希望您继续支持HC666^_^

 

 

 

     您的建议与评论是我完善自我的动力,感谢您的浏览,有毛病的地方欢迎指出来或私信我^_^

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐