为了更清晰一点,照样举个例子吧, 大学是人生中最清闲的时间,同砚们能够做很多本身曾想做而由于种种原因没有做的事,逃课很明显恰是其中之一..为了阻止逃课的行动,每次上课的时刻先生都要点名或许是点学号,我是4班的,先生喜好点学号,"4班1号" 然后下面高声答"到……",“4班2号”,“到”,“4班3号”...... "3号。。3号同砚。。",“先生HC666本日肚子疼上医院了”(中国好室友阿^_^),“哦,4号”..... 先生点名就是对4班的一个索引。
假如将class4看做是由Classes类实例化的一个对象,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 {//定义一个能被索引的类 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+"号\t"+class4[j]); } } } }
效果:
重载索引器:
上面的顺序中,我们完成了经由过程学号索引出该门生姓名,那怎样完成经由过程姓名索引出学号呢?我们将索引看做是一个特别的要领,要领能够应用重载完成差别的参数雷同的功用,那末索引器天然也能够重载。用法与要领重载相似,(检察要领重载点这里),我们照样接着上面的例子,这次要满足运用姓名索引出学号:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义一个能被索引的类 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+"号\t"+class4[j]); } //经由过程姓名索引出学号 for (int k = 1; k < 6; k++) { string name="HC"+k; Console.WriteLine(name+"\t"+class4[name]+"号");//对照上面用法一样参数不一样 } } } }
效果:
在上面中我们说了当一个类定义了索引器就能够将这个类看成数组一样对待,那在进修 数组 的时刻晓得,数组有多维度的,索引器地点的类呢??我们遍历数组用的foreach遍历语句对这个类也能用吗??我下一篇再作引见吧!!(由于学校要短电了……)愿望您继承支撑HC666^_^
以上就是C#进修日志28---索引器、重载索引器的内容,更多相关内容请关注ki4网(www.ki4.cn)!