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

        索引器允许类或结构的实例就像数组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^_^

 

 

 

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

 

 

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

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » C#学习日记28—索引器、重载索引器

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡